pd常用的方法
1.pd.get_dummies
用get_dummies方法实现分类属性的one-hot编码,编码之后不保留分类属性的有序性。
#'Title',"Sex", "Cabin", "Embarked"这四个分类属性进行了one-hot编码编码
df_train_encoding = pd.get_dummies(df_train[['Title',"Sex", "Cabin", "Embarked"]]) #df_train_encoding还是DataFrame类型
得到的格式
Title_Dr Title_Master Title_Miss Title_Mr Title_Mrs Sex_female \
0 0 0 0 1 0 0
1 0 0 0 0 1 1
2.dataframe数据连接的方式(merge, concat)
①merge
两个dataframe的按列连接起来
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, sort=False, suffixes=('_x', '_y'))
参数含义:
left与right:两个不同的DataFrame
how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner
on : 指的是用于连接的列索引名称。必须存在左右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键
left_on:左则DataFrame中用作连接键的列名,这个参数中左右列名不相同,但代表的含义相同时非常有用。
right_on:右则DataFrame中用作连接键的列名
sort:默认为True,将合并的数据进行排序。设置为False可以提高性能
suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x','_y')
df1 = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
df2 = pd.DataFrame({'a':[1,2,3],'b':[7,8,9]})
df = pd.merge(df1, df2, on = 'a', how = 'inner')
a b_x c b_y
0 1 4 7 7
1 2 5 8 8
2 3 6 9 9
②pd.concat
将多个dataframe对象根据不同的轴进行连接。
pd.concat([df1,.., dfn], axis=0, join='outer', ignore_index=False)
ignore_index = True:重建索引
axis = 0, 按行连接,等价于df1.append(df2)
df1 = pd.DataFrame({'a':[3,2,1],'b':[4,5,6],'c':[7,8,9]})
df2 = pd.DataFrame({'a':[3,2,1],'b':[7,8,9],'c':[7,8,np.nan]})
df = pd.concat([df1,df2], axis=0,ignore_index = True)
a b c
0 3 4 7.0
1 2 5 8.0
2 1 6 9.0
3 3 7 7.0
4 2 8 8.0
5 1 9 NaN
axis = 1, 按列连接
与merge的区别在于用于合并的key还保留着
df = pd.concat([df1,df2], axis=1)
a b c a b c
0 3 4 7 3 7 7.0
1 2 5 8 2 8 8.0
2 1 6 9 1 9 NaN
3.pd.melt
该方法可以将列名变为表中的数值。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3,4),index=['AA','BB','CC'],columns= ['A','B','C','D'])
print(df)
f=pd.melt(df,id_vars=['D'],value_vars=['A','B'],var_name='name',value_name='value')
print(f)
结果:
A B C D
AA 0 1 2 3
BB 4 5 6 7
CC 8 9 10 11
D name value
0 3 A 0
1 7 A 4
2 11 A 8
3 3 B 1
4 7 B 5
5 11 B 9
4.pd.drop
去除某行或某列,默认axis=0是删除行
df.drop('col_name',axis=1,inplace=True) #删除列,且直接改变df
5.文件的读写
train_data=pd.read_csv('train.csv') #读取文件,返回是dataframe类型
train_data.to_csv('train.csv',index=False) #写文件,index=False表示不需要将index输出到文件
6.pd.pivot和pd.pivot_table
pd.pivot函数是基于原有的dataframe创建一个新的表。有3个参数:index,columns和values。
如果原始的表中存在重复的数据,则pivot函数会出错。原因如下:
pd.pivot_table函数可以处理这种重复的情况,比pivot函数多了一个参数:aggfunc,用来指明转换时如何处理,默认是取“均值”。
对于字符串的数据,采用拼接各个值的方法。代码如下:
feature_data=part_1_2.pivot_table(index='vid', columns='table_id', values='field_results',aggfunc=lambda x: '#'.join(str(v) for v in x))