您的位置:首页 > 编程语言 > Python开发

Python学习笔记-pandas用法

2019-03-14 08:42 405 查看

Python数据分析学习

数据分析相关内容如下图所示:

1.pandas简介

  1. Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
  2. Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
  3. 数据结构:
    (1)Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
    (2)Time- Series:以时间为索引的Series。
    (3)DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
    (4)Panel :三维的数组,可以理解为DataFrame的容器。
    (5)Pandas 有两种自己独有的基本数据结构。读者应该注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。只不过,Pandas 里面又定义了两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。

2.Pandas基本用法

2.1 读取csv文件(read_csv)

官方示例:

read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

常用参数实例:

import pandas as pd

df = pd.read_csv('file_name.csv',encoding='utf-8',sep=' ',engine='python')

encoding:编码方式
sep:指定分隔符
engine:选择读取的引擎目前来说C更快,但是Python的引擎有更多选择的操作

  • ps:其余参数可查看官方文档的介绍

在批量处理csv文件时,当需要对某一列的数值进行迭代打印输出时:
方法一:

import pandas as pd

df = pd.read_csv('file_name.csv',encoding='utf-8',sep=',',engine='python')
for i in df.index:
row = df.loc[i]
data = row['列名']
print(data)

方法二:

import pandas as pd

df = pd.read_csv('file_name.csv',encoding='utf-8',sep=',',engine='python')
for column, row in data.iterrows():
data = row['列名']
print(data)
2.2 读取csv文件(to_csv)

官方示例:

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None,
header=True, index=True, index_label=None, mode='w', encoding=None, compression=None,
quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None,
date_format=None, doublequote=True, escapechar=None, decimal='.')

代码实例:

#coding:utf-8
import pandas as pd
import numpy as np

a = [1,2,3]
b = [4,5,6]
c = [8,7,9]

dict = {"表头1":a,"表头2":b,"表头3":c}

df = pd.DataFrame (dict, columns = ["表头1","表头2","表头3"])
df.to_csv("testfoo.csv",encoding = "utf-8",sep=',')

"""
结果:
表头1 表头2 表头3
0 1 4 8
1 2 5 7
2 3 6 9

"""

Pandas-DataFrame基础知识点总结

  • DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series公用一个索引。
    DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。这里主要介绍这两种方式。

pandas中的DataFrame可以使用一下构造函数创建

pandas.DataFrame( data,index,columns,dtype,copy)

构造函数的参数如下:

编号 参数 描述
1 data 数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame。
2 index 对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n),如果没有传递索引值。
3 columns 对于列标签,可选的默认语法是 - np.arange(n)。 这只有在没有索引传递的情况下才是这样。
4 dtype 每列的数据类型。
5 copy 如果默认值为False,则此命令(或任何它)用于复制数据。
2.3 创建DataFrame

Pandas数据帧(DataFrame)可以使用各种输入创建,如 -

列表字典系列Numpy ndarrays另一个数据帧(DataFrame)

  • 列表
  • 字典
  • 系列
  • Numpy ndarrays
  • 另一个数据帧(DataFrame)
2.4 创建一个空的DataFrame

代码示例:

import pandas as pd
df = pd.DataFrame()
print(df)
"""
结果:
Empty DataFrame
Columns: []
Index: []
"""

一般在创建DataFrame之后,将数据用to_csv方法进行写入到csv文件中进行存储。

2.5 Pandas数据合并

1.concat用法

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
  • objs:series,dataframe或者是panel构成的序列list
  • axis:需要合并链接的轴,0是行,1是列(1:以列合并,列数增加,0:以行合并,行数增加)
  • join:连接的方式inner或者outer(inner:两表的交集,outer:两表的并集)

数据处理过程分析:

  • EnName(19.3.5)(test).csv文件中包含EnName,MoviesName,Plot 项
  • Chinese_EnName(19.3.13).csv文件中包含EnName,MoviesName,Chinese_Plot 项

代码示例:

import pandas as pd

#读取csv文件获取操作对象
#
df1 = pd.read_csv('EnName(19.3.5)(test).csv',encoding='utf-8',sep=',',engine='python')
df2 = pd.read_csv('Chinese_EnName(19.3.13).csv',encoding='utf-8',sep=',',engine='python')
#合并df1,df2文件,以列合并,取他们的并集
res = pd.concat([df1, df2], axis=1, join='outer')
print(res)

运行结果如图所示:

这个时候我们发现csv数据在合并的时候,有重复项,这个时候需要我们去删除其中的重复列数据,需要用到drop方法

首先将重复项其中的一列更改列名来方便删除,将其中的EnName更改为C_EnName,MoviesName更改为C_MoviesName。然后进行drop操作

import pandas as pd

#定义资料集
df1 = pd.read_csv('EnName(19.3.5)(test).csv',encoding='utf-8',sep=',',engine='python')
df2 = pd.read_csv('Chinese_EnName(19.3.13).csv',encoding='utf-8',sep=',',engine='python')

df = pd.read_csv('1234.csv',encoding='utf-8',sep=',')
drop = df.drop(['C_EnName','C_MoviesName'],axis=1)

save = pd.DataFrame(drop)
save.to_csv('1234.csv',encoding='utf-8',sep=',',index=False)
#print(res)

运行结果如图所示:

可以看出数据成功进行处理,该方法适用于不考虑索引(index),并且有几列数据为重复项,则可直接进行数据处理
ps:还需要注意的点是,在concat操作或者drop操作后,通过to_csv方法保存到新文件中,会同时写入index索引值,如若不需要则需要加上参数:index = False 即可

2.6 Pandas去除重复项

我们得到一份数据,首先我们得判断它是否具有重复项,所以我们得使用到duplicated方法来判断,如果有的情况下我们再进一步进行去重工作,在处理csv数据时,这个时候我们需要用到drop_duplicates()函数来操作文件进行去除重复项。
1. 判断是否具有重复项

a = df.duplicated()

a返回的是布尔值,对每一项是否第第一次出现进行判断,第一次出现输出值为False,重复项出现则输出True。

这个drop_duplicate方法是对DataFrame格式的数据,去除特定列下面的重复行。返回DataFrame格式的数据。
例如,data.csv如下所示:

EnName,Gender
Peter,male
Peter,female
Cris,male
Mary,female
Pink,female
Peter,male
Pink,female

我们需要去除EnName和Gender项同时重复的数据,可以看出Peter,male项和Pink,female项为重复项,代码如下所示:

import pandas as pd

df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')

df.drop_duplicates(['EnName','Gender'],'first',inplace=True)
print(df)

执行代码,结果如下图所示:

重复项已被处理,如若我们需要去除单列重复的该项数据,例如EnName为Peter的数据项有多个,则代码如下所示:

import pandas as pd

df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')

df.drop_duplicates(['EnName'],'first',inplace=True)
print(df)

执行代码,结果如下图所示:

即成功处理数据重复项。

2.7 Pandas索引和选择数据

pandas中有三种索引方法:.loc,.iloc和[],注意:.ix的用法在0.20.0中已经不建议使用了!

编号 索引 描述
1 .loc() 基于标签
2 .iloc() 基于整数
3 .ix() 基于标签和整数
2.7.1 df[ ]:

一维

  • 行维度:整数切片、标签切片、<布尔数组>
  • 列维度:标签索引、标签列表、Callable
df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df[:3]

取该csv文件中index为[0:3]的行数

df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df['EnName']

取该csv文件中列名为EnName项

2.7.2 df.loc[ ]:

二维,先行后列

  • 行维度:标签索引、标签切片、标签列表、<布尔数组>、Callable
  • 列维度: 标签索引、标签切片、标签列表、<布尔数组>、Callable

.loc主要是基于标签(label)的,包括行标签(index)和列标签(columns),即行名称和列名称,可以使用df.loc[index_name,col_name],选择指定位置的数据,其它的用法有:

df.loc[:,'EnName']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: