Pandas

pandas数据清洗与整理

2020-06-18  本文已影响0人  文嘉达_0da8

一、数据清洗

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   小明|男    小明  男

———————————————————
以上内容均来自书籍或网络,为个人的学习笔记,如有侵权,请联系删帖。

上一篇 下一篇

猜你喜欢

热点阅读