Pandas学习笔记

  1. Pandas学习笔记

    1. 使用for循环遍历所有元素
    2. atloc
    3. align
    4. atiat,lociloc
    5. pd.isna()
    6. category数据类型存在的意义
    7. coalesce
    8. CategoricalDtype
    9. to_frame(name=name)
    10. as_type
    11. rename
    12. reindx
    13. reindex_like
    14. drop
    15. drop_duplicates
    16. merge
    17. join
    18. concat
    19. any
    20. all
    21. transform
    22. applymap
    23. agg
    24. apply
    25. pipe
    26. applymapapply
    27. aggapply
    28. apply,applymap,agg,transform,pipe
    29. query
    30. assign
    31. eval
    32. explode
    33. 多级索引的显示方法
    34. Pandas 1.1.4对于astype的修复
    35. Pandas_FAQ

使用for循环遍历所有元素

atloc

at只能作用于一个值的修改,loc可以修改多值。如果只要访问单个元素,at比loc速度更快,应该优先选择at而不是loc。

align

作用是将2个dataframe根据列或者行索引进行对齐,保证列或者行的索引数是一致的

atiat,lociloc

已i开头使用整数索引,第一行,第一列就是[0,0]。不以i开头的通过索引值和列标签来获取值。

pd.isna()

用于检测空值最佳的选择,它会根据输入返回bool值来确定是否为空。

category数据类型存在的意义

coalesce

合并多列的值为一列,可以就地修改在首列,也可以重命名新列,合并逻辑(第一列为空的用后面的列填补)

CategoricalDtype

可以将分类变量数据转为categoriceldtype类型,可以设置该列的内部顺序,可以重新自定义顺序. cd

to_frame(name=name)

可以将series转换为一个数据框,然后通过name设置列名

as_type

将数据类型进行转换

rename

改变列或行的名称

reindx

修改列或者索引顺序

reindex_like

从指定的dataframe的索引结构重建索引

drop

删除行或者列

drop_duplicates

根据特定列删除重复值,默认是根据所有列删除重复值。

merge

多表连接的方法,可以内连接、外连接。可以根据列名连接,也可以根据索引连接。

join

多表连接的方法,只根据索引进行连接。

concat

多表拼接,横向或者纵向拼接,可以指定是内连接还是外连接。

any

根据一列或者一行布尔值返回一个布尔值结果,如果该值的列表里面只要存在一个True,结果就是True,反之返回False

all

根据一列或者一行布尔值返回一个布尔值结果,如果该值的列表里面只要存在一个False,结果就是False,反之返回True

transform

沿着特定轴的特定索引对df做函数映射变换,通常使用是对df的特定列做函数映射变换,返回相同形状映射后的结果列。

applymap

对整个dataframe所有的元素做函数映射操作,返回映射后相同形状,相同行和列索引的dataframe。

agg

沿着行或者列对dataframe做聚合函数操作,将特定行或者特定列向量聚合到标量结果,比如对一列计算平均值,对一列计数。

apply

  1. 沿着行或者列对dataframe做特定函数操作,当使用的是聚合类型的函数就和agg的效果一样。
  2. 当使用的函数是可以对所有元素做操作的,类似于applymap。
  3. 当指定特定列做apply操作,类似于transfrom。
  4. 也可以对整个df做各种自定义操作(比如取得df根据某种排序规则的前几行),这一点对于需要先分组在apply的df比较有用。

pipe

当你需要对一个dataframe做某种逻辑处理(即自定义函数),并且需要返回一个dataframe。你可以使用pipe函数传递你自己的自定义函数,func(df) => df.pipe(func) 如果你的自定义的函数的第一个参数不是dataframe,而是其他位置才传入dataframe,则可以这样 pipe((func_name,'形参名称'))。即func(a,df) =>df.pipe((func,'df'),a) 如果你的自定义函数还有其他参数(除了df以为),可以这样传入自定义函数的参数.df.pipe(func,param_01=value)`

applymapapply

applymap操作dataframe每一个元素,apply操作dataframe一列,df.apply(意思是对df的所有列做相同的操作,如果这个自定义函数只能对一些列可以用,对其他某些列不能用就可能会报错,比如一些计算只能对数值变量使用,对文本变量就会报错)

aggapply

agg是将指定的向量聚合为标量,比如求向量的平均数,比如将向量元素用字符串拼接为一个字符串,agg传入的就是单独分割开的列。 apply不仅可以将向量聚合为标量,也可以是返回整个dataframe,也可以是返回指定的向量,根据需求来,apply传入的一般是dataframe或者series。 如果agg可以完成需要就使用agg,agg不能完成才考虑apply,因为agg比apply运行速度更快。

apply,applymap,agg,transform,pipe

这四个函数逻辑上非常相似,都是与函数配合完成对df的复杂操作。

query

数据筛选的一种便捷方法,同时查询速度比正常用loc还要快

assign

给dataframe增加新列的一种方法,通过传递关键字参数来构造新列,关键字参数的关键字就是新列的名称,关键字参数的值就是构造列具体值的方式,类似于excel的辅助列。

eval

创建列的一种高级便捷优雅的方式。

explode

将特定列的类似列表的每个元素展开为一行,同时复制其他列的值,保留原始索引。

输入数据如下:

 姓名球队国籍
0莱奥内尔·梅西巴塞罗那['阿根廷', '西班牙']
1克里斯蒂亚诺·罗纳尔多['曼联', '皇家马德里']葡萄牙

输出结果:

 姓名球队国籍
0莱奥内尔·梅西巴塞罗那阿根廷
0莱奥内尔·梅西巴塞罗那西班牙
1克里斯蒂亚诺·罗纳尔多曼联葡萄牙
1克里斯蒂亚诺·罗纳尔多皇家马德里葡萄牙

多级索引的显示方法

重复索引标签的形式:

稀疏的形式:

Pandas 1.1.4对于astype的修复

  1. 现在,series的astpe方法传入str参数,不会将None转换为'nan',但是仍然会将np.nan转换为'nan'
  2. 如果astype传入string参数,则所有空值会被转换为pd.NA

Pandas_FAQ

直接对dataframe的列重新赋值就可以了。

只能通过使用at方法,当你使用loc方法它会以为你要给多列赋值,赋的值就是列表的元素,而且必须把类型转换为object类型,否则依然会报错(setting an array element with a sequence)

使用np.where(条件,条件真返回,条件否返回)

理论上这2个读取表格的方法,通过设置参数可以读取单表中任何指定区域的数据,还可以设置哪些字符被识别为NA,表头和索引的位置.