码迷,mamicode.com
首页 > 其他好文 > 详细

Pandas使用技巧

时间:2020-12-09 12:04:52      阅读:4      评论:0      收藏:0      [点我收藏+]

标签:data   合并   版本   正则   contains   因此   效果   english   ram   

删除DataFrame指定列有空值的行

  1. mydf.dropna(subset=[‘col1‘, ‘col2‘], inplace = True)

  2. mydf = pd.DataFrame({
                        ‘name‘ : [‘Tom‘,‘Amy‘,‘John‘,‘George‘],
                        ‘sex‘ : [‘male‘,‘female‘,np.nan,‘male‘],
                        ‘number‘ : [‘SA1001‘,‘SA1002‘,‘SA1003‘,‘SA1004‘],
                        ‘grade‘ : [11, 22, 33, 44]
                    })
     mydf[‘sex‘].isnull().value_counts()
     mydf[‘sex‘] = mydf[‘sex‘].fillna(‘999‘)
     pos = mydf[mydf.sex==‘999‘].index.tolist()
     mydf = mydf.drop(pos) # mydf.drop(pos, inplace = True)

找出DataFrame中空元素所在行

  df[df.isnull().T.any()]`

非转置:frame3.isnull().any(),得到的每一列求any()计算的结果,输出为列的Series。

删除DataFrame中某一列

1. del mydf[‘colume_name‘] 直接修改原来的数据
2. mydf.drop(‘colume_name‘, axie = 1, inplace = True)

删除多列可以经由以下方式扩展:

1. col = [‘column1‘, ‘column2‘]   # 指定多个列名
   mydf.drop(labels = col, axis = 1, inplace = True)
2. mydf.drop(mydef.columns[[2,4]], axie = 1, inplace = True) # 指定多个列索引

DataFrame合并

merge

pd.merge(df_left, df_right, how = ‘left/right‘, on = ‘column_name‘)`:函数实现列的合并,on指向的列名必须在两个df表中都存在。

    df1 = pd.DataFrame({‘name‘:[‘Tom‘,‘Amy‘,‘John‘,‘George‘],
                        ‘sex‘:[‘male‘,‘female‘,np.nan,‘male‘],
                        ‘number‘:[‘SA1001‘,‘SA1002‘,‘SA1003‘,‘SA1004‘]})
    df2 = pd.DataFrame({‘name‘:[‘Tom‘,‘Amy‘,‘John‘,‘George‘],
                        ‘age‘:[18,22,25,20],
                        ‘grade‘:[77, 88, 99, 86]})
    df3 = pd.DataFrame({‘name‘:[‘Tom‘,‘Amy‘,‘Jack‘,‘George‘],
                        ‘age‘:[18,22,25,20],
                        ‘grade‘:[77, 88, 90, 86]})
    print(pd.merge(df1, df2, how=‘left‘, on=‘name‘))
    # Jack 那一行被遗弃,而df1的John在df3不存在因此age和grade是NaN
    print(pd.merge(df1, df3, how=‘left‘, on=‘name‘))  
    # John 那一行被遗弃,而df1的Jack在df3不存在因此sex和number是NaN
    print(pd.merge(df1, df3, how=‘right‘, on=‘name‘))

concat

pd.concat([df1, df2], axis = 1),按列拼接则需要行数一致。
pd.concat([df1, df2], axis = 0, ignore_index = True), 按行拼接会使得不重名的列为NaN,ignore_index设为True使得新添df2元素的序号沿着df1本来的末尾序号递增.

append

df1.append(df2, ignore_index = True),横向添加新行

如果添加的列名不在dataframe对象中,将会被当作新的列进行添加。
因此和 pd.concat([df1, df2],axis = 0)效果一样。

DataFrame类型转换成numpy.array类型

  1. df.values --> 可以存在字符串
  2. df.as_matrix() --> 高版本已过时
  3. np.array(df)

DataFrame求某些列最小值、最大值、均值

  1. df[[‘col1‘, ‘col2‘, ‘col3‘]].min()、 df[[‘col1‘, ‘col2‘, ‘col3‘]].max()、 df[[‘col1‘, ‘col2‘, ‘col3‘]].mean()
  2. numpy.min(df[[‘col1‘, ‘col2‘, ‘col3‘]])

归一化函数

  max_min_scaler = lambda x : (x-np.min(x))/(np.max(x)-np.min(x))
  print(df.iloc[:,2:].apply(max_min_scaler))
  print(df[[‘chinese_grade‘,‘math_grade‘,‘english_grade‘]].apply(max_min_scaler)) #方法2

调整列顺序

df = pd.DataFrame({‘name‘:[‘Tom‘,‘Amy‘,‘John‘,‘George‘],
                ‘age‘:[18,22,25,20],
                ‘chinese_grade‘:[77, 88, 99, 86],
                ‘math_grade‘:[75,98,88,66],
                ‘english_grade‘:[67,70,59,78]})
df = df[[‘age‘, ‘name‘, ‘chinese_grade‘, ‘math_grade‘, ‘english_grade‘]]

修改index的值 : 与已存在dataframe目前长度必须匹配

df.index = range(4,0,-1) 
df.index = [4,3,2,1]
df.index = [‘a‘, ‘b‘, ‘c‘, ‘d‘] # 可设为字符串

提取df含有指定字符串的行

行提取

mask = [False, True, False, True]
df_mask = df[mask]
print(df_mask)

完全匹配

print(df[‘name‘] == ‘Amy‘)
print(df[df[‘name‘] == ‘Amy‘])

部分匹配

case=True不区分大小写,na=True遇到NaN也认为搜到了目标

print(df[‘name‘].str.contains(‘o‘, case=False, na=False))
print(df[df[‘name‘].str.contains(‘o‘)])

以特定字符串开头

df[‘name‘].str.startswich(‘A‘)

以特定字符串结尾

df[‘name‘].str.endswich(‘e‘)

正则表达式模式匹配

df[‘name‘].str.match(pattern)

Pandas使用技巧

标签:data   合并   版本   正则   contains   因此   效果   english   ram   

原文地址:https://www.cnblogs.com/Higgerw/p/14087574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!