欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pandas项目中使用的一些代码总结

程序员文章站 2022-07-03 16:55:25
...
  1. 在使用逻辑筛选的时候需要注意:
  • 逻辑符号|or虽然都可以用,但是并不完全等同,or只要左边的成立了,右边就不会执行了,|只要左右有一个成立,都行,例子:df[(df 表达式1) | (df 表达式2)],[2020-8-2补:|可以理解条件的并集,&就是交集]
  1. apply用于df的行或列,applymap用于df的每一个元素,例如:

    jingdu = lambda x: '%.2f' % x
    df.applymap(jingdu)
    

    map用于series的每一个元素

  2. 注意区别pandas中df['a'],df[['a']],df.a

  3. 顺便提一下python中的map:

    map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])	
    
  4. 如果要去掉重复行,可以自己写个循环解决,也可以使用:

    data.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)
    

    其中subset包含的是你要筛选的具有相同元素的列名集合,keep有三种选择('first': 保留重复的第一行, 'last': 保留重复的最后一行,'False': 删除所有的重复行 ),inplace=True表示对原df进行修改

  5. 如果要在一个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))
    
  6. 如果要继续在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

  7. .to_csv中的参数说明:

  • index=0不保留index
  • header=0不保留列名
  • columns=[]只保留某列
  • sep=','使用,来分割数据
  • na_rep='NAN'使用NAN来保留所有的缺损数据
  • float_format='%.2f'小数点后保留2位有效数字
  1. 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()
    
  2. df.height.isin(['178cm'])

    	0    True
    Name: height, dtype: bool
    
  3. 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]