美文网首页Pandas
pandas数据清洗与整理

pandas数据清洗与整理

作者: 文嘉达_0da8 | 来源:发表于2020-06-18 23:50 被阅读0次

    一、数据清洗

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

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

    相关文章

      网友评论

        本文标题:pandas数据清洗与整理

        本文链接:https://www.haomeiwen.com/subject/wbdpxktx.html