pandas 在数据分析中的常用函数

载入csv 文件load

数据通常保存为csv文件。

示例代码:

1
2
3
import pandas as pd
import numpy as np
train_df = pd.read_csv('../input/train.csv')

修改列的名字rename

示例

  • atom->atom_0
  • x->x_0
  • y->y_0
  • z->z_0

示例代码

1
newtrain_df.rename(columns={'atom':'atom_0', 'x':'x_0', 'y':'y_0', 'z':'z_0'}, inplace = True)

调整列的顺序

代码

1
df = df[['user_id','book_id','rating','mark_date']]

去除重复记录drop_duplicates

1
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
  • subset : column label or sequence of labels, optional 用来指定特定的列,默认所有列
  • keep : {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项
  • inplace : boolean, default False 是直接在原来数据上修改还是复制一个副本在副本上修改

对旧列计算添加新的列

单列计算

1
2
3
def newfunc(x):
return x**2
df['newcol']=df['oldcol'].map(newfunc)

多列计算

示例

1
df['test']=df.apply(lambda x: x['x_0']+x['x_1'],axis=1)

删除行和列

1
2
3
print frame.drop(['a'])  # 删除行 返回新表
print frame.drop(['Ohio'], axis = 1) # 删除列 返回新表
DF.drop('column_name',axis=1, inplace=True)

drop函数默认删除行,删除列需要加axis = 1

第一个参数:删除那几行,行名或者列名的列表
第二个参数:axis=0 默认行; axis=1 列

删除列的第二个方法,保留需要的列

1
2
newtrain_df=newtrain_df[['id','molecule_name','atom_index_0','atom_elem_0','x_0','y_0','z_0','atom_index_1','type','scalar_coupling_constant']]
newtrain_df.head()

横向合并两张表df

如果两张表的记录数目是一样的,id也是完全对应的,直接合并就可以。

1
result = pd.merge(df_train, df_ans, on=['id'])

或者

1
result = df_train.merge( df_ans, on=['id'])

纵向合并多张表

当需要合并的表的字段完全相同的时候,直接用concat 合并即可

1
2
3
frames = [df1, df2, df3]

result = pd.concat(frames)

将df 导出为csv

示例代码

1
result.to_csv("train_x_y.csv")

根据key-value查找具体的记录

我们想查看merge 后的表和前面的表记录是否一致,查看id=’52b6d03a’的记录。

1
2
3
df_train[df_train['id'].isin(['52b6d03a'])]
df_ans[df_ans['id'].isin(['52b6d03a'])]
result[result['id'].isin(['52b6d03a'])]

根据value的数值比较 查找具体的记录

1
2
3
imfs_df[imfs_df['score0'] == 0]
imfs_df[imfs_df['score0'] > 0]
df[(df[col] > 0.5) & (df[col] < 0.7)]

打乱顺序

1
result_random = result.sample(frac=1)

frac 返回数据的比例,

  • frac =1 打乱所有的数据并返回。
  • frac =0.5 打乱并返回其中一半的数据

统计行数

  • len(df)
  • df.shape 行列

添加新列

查看原有列的shape df_valx[‘id’].shape
确保新列的shape 和旧列的 shape 相同

1
df_valx['newcolname']=p4_predict.reshape((26358,))

选取多个列的数据

1
df[['col1','col3']]

https://stackoverflow.com/questions/11285613/selecting-multiple-columns-in-a-pandas-dataframe

根据colname 获取子表

1
2
3

colnames=['name1',['name2']]
df[colnames]

接受的参数必须是列表,不能是元组。

查看数据类型

1
df.dtypes

修改数据类型

1
df[[column]] = df[[column]].astype(type)

含3个值的数据数据修改为类别数据

1
2
3
4
5
6
7
8
9
cols = data.columns.tolist()
col2=[]
for col in cols:
print('col',col,data[col].nunique() )
if(data[col].nunique()<2):
col2.append(col)
for c in col2:
print("c",c)
data[[c]]=data[[c]].astype('category')

替换所有的NAN

1
2
3
4
5
6
7
8
#可以尝试下 fillna():

#fill all Nan value with zero
df = df.fillna(0)

#如果不想用df=df.addna(),也可以这么做:

df.fillna(0, inplace=True)

推荐方法一

1
2
data[['p2']]=data[['p2']].fillna(0)
data[['p4']]=data[['p4']].fillna(0)

UPDATING