一、数据清洗
1. 查看缺失值
可以获取每列的缺失值数量,再通过求和就可以获取整个DataFrame的缺失值数量。
df.isnull() #True为缺失值
df.isnull().sum()
可以通过info方法,看出DataFrame每列数据的缺失值情况。
df.info()
2.删除缺失值
df.dropna()
df.dropna(how='all') #传入how=all,只会删除全为NaN的那些行
df.dropna(how='all',axis=1) #如果需要删除列,则指定轴方向即可
3. 填充缺失值
df.fillna(0)
也可以针对不同列填充不同的值
df.fillna({'性别':'男','年龄':30})
对重新索引(reindex)中填充缺失值的方法同样适用于fillna中,也可以通过平均值等作为填充数。
df.fillna(method='ffill')
df[0]=df[0].fillna(df[0].mean())
4.替换值
- 一对一替换
df.replace(' ','不祥')
- 多对一替换
df[0].replace([240,260,280],33)
- 多对多替换
df.replace({240:32,260:33,280:34})
5. 移除重复数据
通过duplicated方法判断各行是否有重复数据,通过drop_duplicates可以删除多余的重复项。
data={
'city':['北京','上海','北京','北京'],
'name':['张三','李四','张三','小明'],
'sex':['female','male','female','male'],
'year':[2001,2002,2001,2002]
}
df=pd.DataFrame(data)
Out[ ]:
city name sex year
0 北京 张三 female 2001
1 上海 李四 male 2002
2 北京 张三 female 2001
3 北京 小明 male 2002
df.duplicated()
Out[ ]:
0 False
1 False
2 True
3 False
dtype: bool
df.drop_duplicates(['sex','year'])
Out[ ]:
city name sex year
0 北京 张三 female 2001
1 上海 李四 male 2002
二、数据合并和重塑
1.merge合并
fruit
Out[ ]:
fruit price
0 apple 23
1 banana 32
2 orange 45
amount
Out[ ]:
amount fruit
0 5 apple
1 3 banana
2 6 apple
3 3 apple
4 5 banana
由于两个DataFrame都有fruit列名,所以默认按该列进行合并。也可以用on来指定列名。
pd.merge(price,amount)
pd.merge(price,amount,on='fruit')
fruit price amount
0 apple 23 5
1 apple 23 6
2 apple 23 3
3 banana 32 3
4 banana 32 5
- 指定左右连接键(两个表没有公共列)
pd.merge(price,amount,left_on='fruit',right_on='fruit')
- 把索引列当做连接键
pd.merge(df1,df2,left_index=True,right_index=True)
merge默认为内连接(inner),也可以选择左连接(left)、右连接(right)和外连接(outer)
pd.merge(amount,price,how='left')
pd.merge(amount,price,how='right')
pd.merge(amount,price,how='outer')
合并时要考虑列名重复的问题,可以用suffixes处理改问题
pd.merge(df1,df2,on='key1',suffixes=('_left','_right')
2. concat连接
pd.concat([df1,df2])
pd.concat([df1,df2],ignore_index=True)
3. 数组重塑
df=pd.DataFrame(np.arange(9).reshape(3,3),
index=['a','b','c'],
columns=['one','two','three'])
df.index.name='alph'
df.columns.name='number'
Out[ ]:
number one two three
alph
a 0 1 2
b 3 4 5
c 6 7 8
df.stack()
Out[ ]:
alph number
a one 0
two 1
three 2
b one 3
two 4
three 5
c one 6
two 7
three 8
dtype: int32
df.unstack()
Out[ ]:
number one two three
alph
a 0 1 2
b 3 4 5
c 6 7 8
4. 字符串处理
把数据分成两列,常用的方法是通过函数应用来完成。
data={
'data':['张三|男','李四|女','王五|女','小明|男']
}
df=pd.DataFrame(data)
Out[ ]:
data
0 张三|男
1 李四|女
2 王五|女
3 小明|男
result=df['data'].apply(lambda x:pd.Series(x.split('|')))
Out[ ]:
0 1
0 张三 男
1 李四 女
2 王五 女
3 小明 男
pandas中的str属性可以轻松调用字符串的方法,并运用到整个字段中
df['name']=new_df.str[0]
df['sex']=new_df.str[1]
df
Out[ ]:
data name sex
0 张三|男 张三 男
1 李四|女 李四 女
2 王五|女 王五 女
3 小明|男 小明 男
———————————————————
以上内容均来自书籍或网络,为个人的学习笔记,如有侵权,请联系删帖。
网友评论