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)