pandas项目中使用的一些代码总结
程序员文章站
2022-07-03 16:55:25
...
- 在使用逻辑筛选的时候需要注意:
- 逻辑符号
|
和or
虽然都可以用,但是并不完全等同,or
只要左边的成立了,右边就不会执行了,|
只要左右有一个成立,都行,例子:df[(df 表达式1) | (df 表达式2)]
,[2020-8-2补:|
可以理解条件的并集,&
就是交集]
-
apply
用于df的行或列,applymap
用于df的每一个元素,例如:jingdu = lambda x: '%.2f' % x df.applymap(jingdu)
map
用于series的每一个元素 -
注意区别pandas中
df['a'],df[['a']],df.a
-
顺便提一下python中的
map
:map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
-
如果要去掉重复行,可以自己写个循环解决,也可以使用:
data.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)
其中
subset
包含的是你要筛选的具有相同元素的列名集合,keep
有三种选择('first'
: 保留重复的第一行,'last'
: 保留重复的最后一行,'False'
: 删除所有的重复行 ),inplace=True
表示对原df进行修改 -
如果要在一个df中插入一列,可以使用:
df.insert(column_axis, your_column_name, your_data)
举个实际的例子吧,假如原始df为:
df = DataFrame({'name':['sea'], 'age':[25], 'gender':['male']})
name age gender 0 sea 25 male
你可以在df创建的时候,定义好
index=[]
和columns=[]
然后,就是在df中第一列上插入一个新的Series
:df.insert(0, 'height', Series(['178cm']))
(也可以不需要Series,直接写成list)
height name age gender 0 178cm sea 25 male
我顺便讲讲
drop
吧,直接对刚才生成的df进行操作吧,一看就可以明白用法了:
step1:使用drop
或者直接索引来提取出height
列df.drop(['name', 'age', 'gender'], axis=1, inplace=False) # height_column = data['height'] # 这是直接索引
step2:在df上直接删除
height
列:# 第一种方法 del df['height'] # 第二种方法 df.drop['height', axis=1, inplace=True] # axis=0表示行,1表示列
step3:将
drop
后剩下的height
列insert到删除了height
列的df中,相当于恢复原状啦df.insert(0, 'height', df.drop(['name', 'age', 'gender'], axis=1, inplace=False))
-
如果要继续在df中插入一行,可以使用:
df.append({'height':'188cm', 'name':'peter'},ignore_index=True)
height name age gender 0 178cm sea 25.0 male 1 188cm peter NaN NaN
ignore_index
在append多行时,可以按序重新设置index为:0,1,2,…,而没有重复的index -
.to_csv
中的参数说明:
-
index=0
不保留index -
header=0
不保留列名 -
columns=[]
只保留某列 -
sep=','
使用,来分割数据 -
na_rep='NAN'
使用NAN
来保留所有的缺损数据 -
float_format='%.2f'
小数点后保留2位有效数字
-
data.set_index('height')
name age gender height 178cm sea 25 male
注意了,这个height不是列名!,只是指定了一个叫178cm的行名,
可以通过索引查看一下:df.loc['178cm'] # 或者用index_number df.iloc[0]
name sea age 25 gender male Name: 178cm, dtype: object
如果要恢复到原来的index设置,可以用:
df.reset_index()
-
df.height.isin(['178cm'])
0 True Name: height, dtype: bool
-
groupby函数
df2 = df.append({'height':'188cm', 'name':'sh'},ignore_index=True)
df2 = df.append({'height':'188cm', 'name':'sh'},ignore_index=True)
print(df2)
df3=df2.groupby("height")
print(df3)
for n, g in df3:
print( "group_name:", n, "\n|",g,"|")
df4 = df3['name']
print(df4)
df5 = df4.apply(list).to_frame() # 如果不用.to_frame(),不会出现name这个列名
print(df5)
height name age gender
0 178cm sea 25.0 male
1 188cm sh NaN NaN
2 188cm sh NaN NaN
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x7f95fb189b70>
group_name: 178cm
| height name age gender
0 178cm sea 25.0 male |
group_name: 188cm
| height name age gender
1 188cm sh NaN NaN
2 188cm sh NaN NaN |
<pandas.core.groupby.groupby.SeriesGroupBy object at 0x7f95fb1899b0>
name
height
178cm [sea]
188cm [sh, sh]