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

  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]

猜你喜欢

转载自blog.csdn.net/qq_37285386/article/details/107722168