Python数据分析入门(十):数据清洗和准备

数据清洗是数据分析关键的一步,直接影响之后的处理工作

数据需要修改吗?有什么需要修改的吗?数据应该怎么调整才能适用于接下来的分析和挖掘?

是一个迭代的过程,实际项目中可能需要不止一次地执行这些清洗操作

1. 处理缺失数据:

  • pd.fillna()
  • pd.dropna()


    2. 数据转换

    2.1 处理重复数据

    duplicated()返回布尔型Series表示每行是否为重复行

    示例代码:

    import numpy as np
    import pandas as pd
    
    df_obj = pd.DataFrame({'data1' : ['a'] * 4 + ['b'] * 4,
                           'data2' : np.random.randint(0, 4, 8)})
    print(df_obj)
    
    print(df_obj.duplicated())

     

    运行结果:

    复制代码
    # print(df_obj)
      data1  data2
    0     a      3
    1     a      2
    2     a      3
    3     a      3
    4     b      1
    5     b      0
    6     b      3
    7     b      0
    
    # print(df_obj.duplicated())
    0    False
    1    False
    2     True
    3     True
    4    False
    5    False
    6    False
    7     True
    dtype: bool
    复制代码

     

    drop_duplicates()过滤重复行

    • 默认判断全部列
    • 可指定按某些列判断

    示例代码:

    print(df_obj.drop_duplicates())
    print(df_obj.drop_duplicates('data2'))

     

    运行结果:

    复制代码
    # print(df_obj.drop_duplicates())
      data1  data2
    0     a      3
    1     a      2
    4     b      1
    5     b      0
    6     b      3
    
    # print(df_obj.drop_duplicates('data2'))
      data1  data2
    0     a      3
    1     a      2
    4     b      1
    5     b      0
    复制代码

     

    2.2 利用函数或映射进行数据转换

    根据map传入的函数对每行或每列进行转换

    示例代码:

    ser_obj = pd.Series(np.random.randint(0,10,10))
    print(ser_obj)
    
    print(ser_obj.map(lambda x : x ** 2))

     

    运行结果:

    复制代码
    # print(ser_obj)
    0    1
    1    4
    2    8
    3    6
    4    8
    5    6
    6    6
    7    4
    8    7
    9    3
    dtype: int64
    
    # print(ser_obj.map(lambda x : x ** 2))
    0     1
    1    16
    2    64
    3    36
    4    64
    5    36
    6    36
    7    16
    8    49
    9     9
    dtype: int64
    复制代码

     

    2.3 替换值

    replace根据值的内容进行替换

    示例代码:

    # 单个值替换单个值
    print(ser_obj.replace(1, -100))
    
    # 多个值替换一个值
    print(ser_obj.replace([6, 8], -100))
    
    # 多个值替换多个值
    print(ser_obj.replace([4, 7], [-100, -200]))

     

    运行结果:

    复制代码
    # print(ser_obj.replace(1, -100))
    0   -100
    1      4
    2      8
    3      6
    4      8
    5      6
    6      6
    7      4
    8      7
    9      3
    dtype: int64
    
    # print(ser_obj.replace([6, 8], -100))
    0      1
    1      4
    2   -100
    3   -100
    4   -100
    5   -100
    6   -100
    7      4
    8      7
    9      3
    dtype: int64
    
    # print(ser_obj.replace([4, 7], [-100, -200]))
    0      1
    1   -100
    2      8
    3      6
    4      8
    5      6
    6      6
    7   -100
    8   -200
    9      3
    dtype: int64
    复制代码

     

    3. 字符串操作

    3.1 字符串方法

    3.2 正则表达式方法

    3.3 pandas字符串函数

    posted @   松鼠爱吃饼干  阅读(467)  评论(0编辑  收藏  举报
    编辑推荐:
    · AI与.NET技术实操系列(二):开始使用ML.NET
    · 记一次.NET内存居高不下排查解决与启示
    · 探究高空视频全景AR技术的实现原理
    · 理解Rust引用及其生命周期标识(上)
    · 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
    阅读排行:
    · 全程不用写代码,我用AI程序员写了一个飞机大战
    · DeepSeek 开源周回顾「GitHub 热点速览」
    · 记一次.NET内存居高不下排查解决与启示
    · MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
    · .NET10 - 预览版1新功能体验(一)
    Title
    点击右上角即可分享
    微信分享提示