【利用python进行数据分析】pandas入门

pandas引入约定:

注:因为Series和DataFrame用的次数多,因此引入本地命名空间中更方便。

pandas的两个主要数据结构:Series和DataFrame

一、Series

Series由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(索引)组成。

Series有values和index两个属性,表示数组形式和其索引对象。

可以自己设置index:

也可以通过字典来创建Series:

Series对象本身及其索引都有一个name属性:

Series的索引可以通过赋值就地修改:

二、DataFrame

构建DataFrame的方法:

1.传入一个由等长列表或Numpy数组组成的字典:

如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:

行索引可以通过索引字段ix进行获取:

为不存在的列赋值会创造出一个新列。例如,frame中不存在debt列,,如此赋值会创造出一个新列。

pandas的isnull和notnull函数用于检测缺失数据:

关键字del用于删除列:

通过索引返回的列是相应数据的视图,不是副本,因此对返回的Series做的任何修改都会反映到DataFrame上。

另一种很常见但是也较难理解的产生DataFrame的方式是嵌套字典:

传给DataFrame,会被解释为:外层字典的键作为列,内层键则作为行索引:

DataFrame构造函数所能接受的数据:

可以设置DataFrame的index和columns的name属性:

Series的index是不可修改的,这一点非常重要。

三、重新索引

pandas对象可以通过reindex重新创造一个新索引。

对于时间序列数据,重新索引需要做一些插值处理,需要使用method参数:

对于DataFrame,reindex可以修改行和列索引,或者两个都修改,但如果只传入一个序列,则会重新索引行:

使用columns可以重新索引列:

ix的标签索引:

四、丢弃指定轴上的项

对于Series使用drop方法:

对于DataFrame,使用drop方法可以删除任意轴的索引值,如不加axis=1,则默认删除的是0轴上的索引:

五、索引、选取和过滤

Series的索引类似Numpy数组的索引,但是Series可以使用index来选取切片。

【利用标签的切片和普通的python切片不同,其末端是包含的】

注:新版本的pandas已弃用icol和irow方法,改为iloc方法

注:直接对dataframe使用列索引可以直接获取列,如果使用ix方法再加上索引就必须遵循先行后列。

六、算术运算和数据对齐

注意:自动的数据对齐会在不重叠的索引处引入NA值

可以使用add方法,如:df1+df2变成:

即可避免出现df1+df2的数值只有当索引在两个数据框都存在时才显示。

七、DataFrame和Series之间的运算

默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播

如果希望匹配的是行且在列上广播,则必须使用算术运算方法,且在axis参数中指定轴:

八、函数应用和映射

1.Numpy的ufuncs(元素级数组方法)也可用于操作pandas对象:

2.apply方法可以将函数应用到由各列或行所形成的一维数组上:

元素级的操作可以用applymap()函数,因为Series的元素级操作可以使用map()用法。

apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作

九、排序和排名

返回对行索引或列索引进行排序后的结果,可使用sort_index方法。

1.对Series,只有一个索引

2.对于DataFrame,如不指定axis,则默认axis=0

数据是默认升序排序,如果要降序排序则使用参数ascending=False

3.如果要按值对Series进行排序,可以使用order方法,缺失值默认放到末尾。

4.根据某一列的值进行排序,将一个或多个列的名字传递给by选项:

5.Series和DataFrame的rank方法,默认情况是为各组分配一个平均排名来破坏平级关系。

对于DataFrame,可以在行或列上产生排名:

十、汇总和计算描述统计

调用DataFrame的sum方法会返回列小计,传入axis=1会按行进行求和计算。

NA值会被自动排除,除非整个切片都是NA,但是如果禁用了skipna参数,该功能就不起作用了。

注:NAN会被自动忽略,因此对于NAN的累加还是NAN

describe函数可以产生多个汇总统计的指标:

十一、相关系数与协方差

Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。

对于DataFrame,corr和cov方法返回相关系数和协方差矩阵

DataFrame的corrwith可以计算一个数据框和另一个Series或DataFrame的相关系数:

传入Series的话,就会显示DataFrame的所有行或列和该Series的相关系数;

传入DataFrame的话,则会计算按列名配对的相关系数。

传入axis=1即可按行进行计算。

十二、唯一值、值计数以及成员资格

获取唯一值的函数unique(),如果需要对返回的唯一值进行排序的话,需要使用函数uniques.sort()

value_counts用于计算一个Series中各值出现的频率

isin用于判断矢量化集合的成员资格,可用于选取Series或DataFrame列中的子集。

将pandas.value_counts传给DataFrame的apply函数:

十三、处理缺失数据

np.nan和python内置的None都会被当作NA处理。

1.滤除缺失数据——dropna

或者直接使用data[data.notnull()]

对于DataFrame,dropna默认丢弃任何含有缺失值的行:

如果使用how='all',那么将只丢弃全为NA的行:

传入axis=1就可以丢弃列。

需要提出的是thresh参数,该参数的类型为整数,它的作用是,比如 thresh=3,会在一行中至少有 3 个非 NA 值时将其保留。

2.填充缺失数据

fillna方法是最主要的函数。

也可以通过一个字典调用fillna,实现对不同的列填充不同的值:

修改一个对象时:
               inplace=True:不创建新的对象,直接对原始对象进行修改;

fillna的参数参考:

十四、层次化索引

一个简单的例子:

选取子集的操作:

注意:可以直接在“内层”中进行选取

层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演者重要的角色

层次化索引后的数据可以通过unstack方法被安排到DataFrame中:

DataFrame的每条轴都可以有分层索引:

可以单独创建MultiIndex然后复用。

十五、重排分级顺序

swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象。

sortlevel根据单个级别对数据进行排序,且交换级别时常常会用到sortlevel,这样最终的结果就是有序的:

这里的level指的是index的level,0指外层,1指内层:

【如果要对columns的级别进行排序,那么需要加axis=1】

通常使用sortlevel(0)会提升数据选取操作的性能。

十六、根据级别汇总统计

与groupby的功能类似。

set_index函数:将一个或多个列转换为行索引,并创建一个新的DataFrame。

可以设置drop=False将列保留下来。

reset_index的功能和set_index相反,层次化索引的级别会被转移到列里:

最后,注意:如果轴索引含有索引器,那么根据整数进行数据选取的操作总是面向标签的:

如果是根据位置那么[:1]只能选取1行,但此处选取了两行。

当索引非整数时,那么python根据整数进行数据选取会自动求助于位置索引。

如果想要直接进行基于位置的索引,可以使用Series的(iget_value)【无法使用】和DataFrame的iloc方法。

【取行】

【取列】

猜你喜欢

转载自blog.csdn.net/m0_37842667/article/details/82185728