p a n d a s 库 是 p y t h o n 中 用 于 数 据 处 理 很 流 行 的 类 库 \color{red}{pandas库是python中用于数据处理很流行的类库} pandaspython,有不太了解的可以看我前几篇博客pandas的基本功能pandas库的数据结构Series和DataFrame的基本使用

  • 基本运行环境
import pandas as pd
import numpy as np

数据清洗

  • 数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。数据清洗是一项复杂且繁琐的工作,是一个分析项目中最占时间且最重要的步骤。
  • 数据清洗主要包括删除重复值、统一规格、修正逻辑、数据压缩、补足缺失/空值、丢弃异常值等,它的目的在于提高数据的质量问题即解决数据的完整性、唯一性、权威性、合法性和一致性

处理缺失值

  • Series
s1 = pd.Series([1,np.nan,3,None,5])
# 输出结果
0    1.0
1    NaN
2    3.0
3    NaN
4    5.0
dtype: float64

检测

# isna/isnull/notnull/notna:判断是否为缺失值
print(pd.isna(s1))
print(pd.isnull(s1))
0    False
1     True
2    False
3     True
4    False
dtype: bool

过滤

# dropna方法:Series对象直接删除空值NA
print(s1.dropna())
0    1.0
2    3.0
4    5.0
dtype: float64

填充

# fillna方法:空值填充
print(s1.fillna(99))
0     1.0
1    99.0
2     3.0
3    99.0
4     5.0
dtype: float64
  • DataFrame
dframe = pd.DataFrame([[1, 6, 3.], [2., np.nan,np.nan],[None, np.nan, pd.NA], [pd.NaT, 7, 4.]],columns=['A','B','C'])
      A    B     C
0     1  6.0   3.0
1   2.0  NaN   NaN
2  None  NaN  <NA>
3   NaT  7.0   4.0 

检测

# isna/isnull/notnull/notna:判断是否为缺失值
print(pd.notna(dframe))
print(pd.notnull(dframe))
       A      B      C
0   True   True   True
1   True  False  False
2  False  False  False
3  False   True   True

过滤

pd.DataFrame.dropna的参数 说明
axis=0 删除NA所在的行,默认
axis=1 删除NA所在的列
how=‘any’ 只要有一个NA就删除,默认
how=‘all’ 整行/列都为NA才删除
thresh=3 整行/列至少有3个非NA数据(有效数据),否则就删除
inplace= 是否在原数据上操作,默认False,即返回新的对象
# dropna方法:DataFrame对象默认删除NA所在的行
print(dframe.dropna())
print(dframe.dropna(axis=1))
print(dframe.dropna(thresh=2))

填充

# 使用指定数据填充
print(dframe.fillna(10))
print(dframe.fillna(value=10))
print(dframe.fillna({'A': 12, 'C': 21}))
# 使用已有数据填充
print(dframe.fillna(method='ffill'))
     A    B    C
0  1.0  6.0  3.0
1  2.0  6.0  3.0
2  2.0  6.0  3.0
3  2.0  7.0  4.0
print(dframe.fillna(method='bfill'))
     A    B    C
0    1  6.0  3.0
1  2.0  7.0  4.0
2  NaT  7.0  4.0
3  NaT  7.0  4.0
  • 关于ffill和bfill填充问题
    ffill前向填充;bfill后向填充。有趣的是,如果有插入索引的问题,在索引填充时前向填充ffill会选取最后一个索引来进行填充;同理,后向填充bfill会选取最后一个索引后的值来进行填充,索引此时填充的即为NaN空值

处理重复值

重复值的定义:

  • 在Series中指相同的数据
  • 在DataFrame中指完全相同的两行。
  1. 检测重复值
s2 = pd.Series([1,1,2,4,5])
print(s2.duplicated(keep='first'))
print(s2.duplicated(keep='last'))
print(s2.duplicated(keep=False))
dframe = pd.DataFrame([[1, 6, 3.], [3, 6, 9],[1, 6, 3.], [5, 7, 4.]],columns=['A','B','C'])
print(dframe.duplicated(keep='first'))
print(dframe.duplicated(keep='last'))
print(dframe.duplicated(keep=False))
duplicated方法的参数 说明
keep=’first’ 第一个除外,将重复项标记为True
keep=’last’ 最后一个除外,将重复项标记为True
keep=False 将所有重复项标记为True
  1. 删除重复值
s2 = pd.Series([1,1,2,4,5])
s2.drop_duplicates()
dframe = pd.DataFrame([[1, 6, 3.], [1, 6, 9],[1, 6, 3.], [5, 7, 4.]],columns=['A','B','C'])
print(dframe.drop_duplicates())
# 删除'B'索引列的重复项
print(dframe.drop_duplicates(['B']))
drop_duplicates方法的参数 说明
keep=’first’ 删除除第一次出现之外的重复项
keep=’last’ 删除除最后一次出现之外的重复项
keep=False 删除所有重复项

处理异常值

dframe = pd.DataFrame([[1, 6, 999], [2., np.nan,np.nan],[None, np.nan, pd.NA], [pd.NaT, 7, 4.]],columns=['A','B','C'])
# 用10替换异常值和空值
print(dframe.replace([999,None,np.nan,pd.NaT,pd.NA],10))
    A     B   C
0   1   6.0  10
1   2  10.0  10
2  10  10.0  10
3  10   7.0   4

更改数据类型

dframe = pd.DataFrame({'A': [1, 1.2, 4.2],
                  'B': [-9, '7', 8.8],
                  'C': ['x', 5.0, 0]})
print(dframe.dtypes)
A    float64
B    object
C     object
dtype: object
# 转换数据类型
print(dframe['B'].astype(dtype='int'))
0   -9
1    7
2    8
Name: B, dtype: int32
# 将参数类型转换为数字类型(支持标量、列表、元组、一维数组、Series;不支持DataFrame)
print(pd.to_numeric(dframe['B']))
print(pd.to_numeric(dframe['C'], errors='coerce'))
errors参数 说明
errors=‘raise’ 无效解析会引发异常,默认
errors=‘coerce’ 无效解析设置为NaN
errors=‘ignore’ 将无效解析返回输入,不转换
Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐