pandas 在数据分析中的常用函数
载入csv 文件load
数据通常保存为csv文件。
示例代码:
1  | import pandas as pd  | 
修改列的名字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  | def newfunc(x):  | 
多列计算
示例1
df['test']=df.apply(lambda x: x['x_0']+x['x_1'],axis=1)
删除行和列
1  | print frame.drop(['a']) # 删除行 返回新表  | 
drop函数默认删除行,删除列需要加axis = 1
第一个参数:删除那几行,行名或者列名的列表
第二个参数:axis=0 默认行; axis=1 列
删除列的第二个方法,保留需要的列
1  | 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']]  | 
横向合并两张表df
如果两张表的记录数目是一样的,id也是完全对应的,直接合并就可以。1
result = pd.merge(df_train, df_ans, on=['id'])
或者1
result = df_train.merge( df_ans, on=['id'])
纵向合并多张表
当需要合并的表的字段完全相同的时候,直接用concat 合并即可1
2
3frames = [df1, df2, df3]
result = pd.concat(frames)
将df 导出为csv
示例代码
1  | result.to_csv("train_x_y.csv")  | 
根据key-value查找具体的记录
我们想查看merge 后的表和前面的表记录是否一致,查看id=’52b6d03a’的记录。1
2
3df_train[df_train['id'].isin(['52b6d03a'])]
df_ans[df_ans['id'].isin(['52b6d03a'])]
result[result['id'].isin(['52b6d03a'])]
根据value的数值比较 查找具体的记录
1  | imfs_df[imfs_df['score0'] == 0]  | 
打乱顺序
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  | 
  | 
接受的参数必须是列表,不能是元组。
查看数据类型
1  | df.dtypes  | 
修改数据类型
1  | df[[column]] = df[[column]].astype(type)  | 
含3个值的数据数据修改为类别数据1
2
3
4
5
6
7
8
9cols = 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  | #可以尝试下 fillna():  | 
推荐方法一1
2data[['p2']]=data[['p2']].fillna(0)
data[['p4']]=data[['p4']].fillna(0)