Python数据分析必备的12种数据清洗技术分享

 更新时间:2025年09月05日 09:23:32   作者:Python资讯站  
数据清洗是数据分析的第一步,它的好坏直接影响到后续分析的准确性和可靠性,下面我们将详细介绍 12 种常见的数据清洗技术,大家可以根据需要进行选择

数据清洗是数据分析的第一步,它的好坏直接影响到后续分析的准确性和可靠性。下面我们将详细介绍 12 种常见的数据清洗技术,并通过实际的代码示例来帮助大家更好地理解和掌握这些技术。

1. 删除缺失值

数据集中经常会有一些缺失值,这些缺失值可能会干扰我们的分析。我们可以选择删除含有缺失值的行或列。

import pandas as pd  
  
# 创建一个包含缺失值的数据集  
data = {  
    'A': [1, 2, None, 4],  
    'B': [5, None, 7, 8],  
    'C': [9, 10, 11, 12]  }  
df = pd.DataFrame(data)  
  
# 删除含有缺失值的行  
df.dropna(inplace=True)  
print(df)  

输出结果:

   A  B   C  
3  4  8  12

解释:

  • dropna() 方法用于删除含有缺失值的行或列。
  • inplace=True 参数表示直接在原数据上进行操作,不返回新的 DataFrame。

2. 填充缺失值

有时候删除缺失值并不是最佳选择,我们可以选择填充缺失值。常见的填充方法包括使用均值、中位数、众数等。

# 填充缺失值  
df = pd.DataFrame(data)  
  
# 使用均值填充  
df.fillna(df.mean(), inplace=True)  
print(df)  

输出结果:

     A    B   C  
0  1.0  5.0   9  
1  2.0  7.5  10  
2  3.0  7.0  11  
3  4.0  8.0  12

解释:

  • fillna() 方法用于填充缺失值。
  • df.mean() 计算每一列的均值,并用这些均值填充缺失值。

3. 删除重复值

数据集中可能会有重复的记录,这些重复记录会影响分析结果。我们可以使用 drop_duplicates() 方法删除重复值。

# 创建一个包含重复值的数据集  
data = {  
    'A': [1, 2, 2, 4],  
    'B': [5, 6, 6, 8],  
    'C': [9, 10, 10, 12]  }  
df = pd.DataFrame(data)  
  
# 删除重复值  
df.drop_duplicates(inplace=True)  
print(df)  

输出结果:

   A  B   C  
0  1  5   9  
1  2  6  10  
3  4  8  12

解释:

  • drop_duplicates() 方法用于删除重复的行。
  • inplace=True 参数表示直接在原数据上进行操作,不返回新的 DataFrame。

4. 转换数据类型

有时候数据的类型可能不符合我们的需求,我们需要转换数据类型。例如,将字符串类型的数字转换为数值类型。

# 创建一个包含字符串类型数字的数据集  
data = {  
    'A': ['1', '2', '3', '4'],  
    'B': ['5', '6', '7', '8'] }  
df = pd.DataFrame(data)  
  
# 转换数据类型  
df['A'] = df['A'].astype(int)  
df['B'] = df['B'].astype(float)  
print(df)  

输出结果:

   A    B  
0  1  5.0  
1  2  6.0  
2  3  7.0  
3  4  8.

解释:

  • astype() 方法用于转换数据类型。
  • intfloat 分别表示整数和浮点数类型。

5. 处理异常值

异常值是指那些与其他数据明显不同的值,它们可能会对分析结果产生负面影响。我们可以使用统计方法来检测和处理异常值。

# 创建一个包含异常值的数据集  
data = {  
    'A': [1, 2, 3, 100],  
    'B': [5, 6, 7, 8]  }  
df = pd.DataFrame(data)  
  
# 检测异常值  
Q1 = df.quantile(0.25)  
Q3 = df.quantile(0.75)  
IQR = Q3 - Q1  
  
# 定义异常值的范围  
lower_bound = Q1 - 1.5 * IQR  
upper_bound = Q3 + 1.5 * IQR  
  
# 删除异常值  
df = df[~((df < lower_bound) | (df > upper_bound)).any(axis=1)]  
print(df)  

输出结果:

   A  B  
0  1  5  
1  2  6  
2  3  7

解释:

  • quantile() 方法用于计算四分位数。
  • IQR 表示四分位距,即第三四分位数减去第一四分位数。
  • lower_boundupper_bound 分别表示异常值的下界和上界。
  • ~ 符号表示取反,any(axis=1) 表示任何一列有异常值的行都会被删除。

6. 标准化和归一化

标准化和归一化是数据预处理中的重要步骤,它们可以将数据转换到相同的尺度,便于后续的分析和建模。

from sklearn.preprocessing import StandardScaler, MinMaxScaler    
# 创建一个数据集  
data = {  
    'A': [1, 2, 3, 4],  
    'B': [5, 6, 7, 8]  }  
df = pd.DataFrame(data)  
  
# 标准化  
scaler = StandardScaler()  
df_scaled = scaler.fit_transform(df)  
df_scaled = pd.DataFrame(df_scaled, columns=df.columns)  
print("标准化后的数据:")  
print(df_scaled)  
  
# 归一化  
scaler = MinMaxScaler()  
df_normalized = scaler.fit_transform(df)  
df_normalized = pd.DataFrame(df_normalized, columns=df.columns)  
print("\n归一化后的数据:")  
print(df_normalized)  

输出结果:

标准化后的数据:  
          A         B  
0 -1.341641 -1.341641  
1 -0.447214 -0.447214  
2  0.447214  0.447214  
3  1.341641  1.341641  
  
归一化后的数据:  
          A         B  
0  0.000000  0.000000  
1  0.333333  0.333333  
2  0.666667  0.666667  
3  1.000000  1.000000  

解释:

  • StandardScaler 用于标准化,将数据转换为均值为 0,标准差为 1 的分布。
  • MinMaxScaler 用于归一化,将数据缩放到 [0, 1] 区间。

7. 重命名列名

有时候我们需要对数据集的列名进行重命名,以便更好地理解和使用数据。

# 创建一个数据集  
data = {  
    'A': [1, 2, 3, 4],  
    'B': [5, 6, 7, 8]  }  
df = pd.DataFrame(data)  
  
# 重命名列名  
df.rename(columns={'A': 'Column1', 'B': 'Column2'}, inplace=True)  
print(df)  

输出结果:

   Column1  Column2  
0        1        5  
1        2        6  
2        3        7  
3        4        

解释:

  • rename() 方法用于重命名列名
  • columns 参数是一个字典,键是旧列名,值是新列名。
  • inplace=True 参数表示直接在原数据上进行操作,不返回新的 DataFrame。

8. 合并数据集

在数据分析中,我们经常需要将多个数据集合并在一起。Pandas 提供了多种合并方法,如 concatmerge

# 创建两个数据集  
data1 = {  
    'A': [1, 2, 3],  
    'B': [4, 5, 6] }  
df1 = pd.DataFrame(data1)  
  
data2 = {  
    'A': [4, 5, 6],  
    'B': [7, 8, 9]  
}  
df2 = pd.DataFrame(data2)  
  
# 使用 concat 合并数据集  
df_concat = pd.concat([df1, df2], ignore_index=True)  
print("使用 concat 合并的数据集:")  
print(df_concat)  
  
# 使用 merge 合并数据集  
df_merge = pd.merge(df1, df2, on='A', how='outer')  
print("\n使用 merge 合并的数据集:")  
print(df_merge)  

输出结果:

使用 concat 合并的数据集:  
   A  B  
0  1  4  
1  2  5  
2  3  6  
3  4  7  
4  5  8  
5  6  9  
  
使用 merge 合并的数据集:  
    A  B_x  B_y  
0  1.0  4.0  NaN  
1  2.0  5.0  NaN  
2  3.0  6.0  NaN  
3  4.0  NaN  7.0  
4  5.0  NaN  8.0  
5  6.0  NaN  9.0  

解释:

  • pd.concat() 方法用于纵向或横向拼接多个数据集。
  • ignore_index=True 参数表示重新生成索引。
  • pd.merge() 方法用于根据指定的列进行合并。
  • on='A' 参数表示根据列 ‘A’ 进行合并。
  • how='outer' 参数表示外连接,保留所有数据。

9. 日期时间处理

日期时间数据在数据分析中非常常见,我们需要学会如何处理这些数据。

# 创建一个包含日期时间的数据集  
data = {  
    'Date': ['2023-01-01', '2023-01-02', '2023-01-03'],  
    'Value': [10, 20, 30]  }  
df = pd.DataFrame(data)  
  
# 将日期时间列转换为 datetime 类型  
df['Date'] = pd.to_datetime(df['Date'])  
  
# 提取年份、月份和日期  
df['Year'] = df['Date'].dt.year  
df['Month'] = df['Date'].dt.month  
df['Day'] = df['Date'].dt.day  
  
print(df)  

输出结果:

        Date  Value  Year  Month  Day  
0 2023-01-01     10  2023      1    1  
1 2023-01-02     20  2023      1    2  
2 2023-01-03     30  2023      1    3

解释:

  • pd.to_datetime() 方法用于将字符串类型的日期时间转换为 datetime 类型。
  • dt 属性提供了多种日期时间相关的操作,如提取年份、月份和日期。

10. 文本数据处理

文本数据在数据分析中也很常见,我们需要学会如何处理这些数据。

# 创建一个包含文本数据的数据集  
data = {  
    'Text': ['hello world', 'python programming', 'data science']  }  
df = pd.DataFrame(data)  
  
# 将文本数据转换为小写  
df['Text'] = df['Text'].str.lower()  
  
# 替换特定字符  
df['Text'] = df['Text'].str.replace(' ', '_')  
  
print(df)  

输出结果:

                  Text  
0       hello_world  
1  python_programming  
2      data_science

解释:

  • str.lower() 方法用于将文本数据转换为小写。
  • str.replace() 方法用于替换文本中的特定字符。

11. 处理分类数据

分类数据在数据分析中也很常见,我们需要学会如何处理这些数据。

# 创建一个包含分类数据的数据集  
data = {  
    'Category': ['A', 'B', 'A', 'C', 'B', 'A']  }  
df = pd.DataFrame(data)  
  
# 将分类数据转换为类别类型  
df['Category'] = df['Category'].astype('category')  
  
# 查看类别及其编码  
print(df['Category'].cat.codes)  

输出结果:

0    0  
1    1  
2    0  
3    2  
4    1  
5    0  
Name: Category, dtype: int8  

解释:

  • astype('category') 方法用于将数据转换为类别类型。
  • cat.codes 属性用于查看类别的编码。

12. 处理缺失值的高级技巧

除了简单的删除和填充缺失值,还有一些高级技巧可以帮助我们更好地处理缺失值。

# 创建一个包含缺失值的数据集  
data = {  
    'A': [1, 2, None, 4],  
    'B': [5, None, 7, 8],  
    'C': [9, 10, 11, 12]  }  
df = pd.DataFrame(data)  
  
# 使用前向填充  
df.fillna(method='ffill', inplace=True)  
print("前向填充后的数据:")  
print(df)  
  
# 使用后向填充  
df = pd.DataFrame(data)  
df.fillna(method='bfill', inplace=True)  
print("\n后向填充后的数据:")  
print(df)  

输出结果:

前向填充后的数据:  
     A    B   C  
0  1.0  5.0   9  
1  2.0  5.0  10  
2  2.0  7.0  11  
3  4.0  8.0  12  
  
后向填充后的数据:  
     A    B   C  
0  1.0  5.0   9  
1  2.0  7.0  10  
2  4.0  7.0  11  
3  4.0  8.0  12  

总结

以上介绍了十二种常用的数据清洗技术,包括删除缺失值、填充缺失值、删除重复值、转换数据类型、处理异常值、标准化与归一化、重命名列名、合并数据集、日期时间处理、文本数据处理、处理分类数据以及处理缺失值的高级技巧。通过实际代码示例展示了每种技术的具体应用,有助于读者更好地理解和掌握这些技术。

​到此这篇关于Python数据分析必备的12种数据清洗技术分享的文章就介绍到这了,更多相关Python数据清洗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python属性和内建属性实例解析

    Python属性和内建属性实例解析

    这篇文章主要介绍了Python属性和内建属性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python入门课程第二讲之怎么运行Python

    python入门课程第二讲之怎么运行Python

    这篇文章主要介绍了python入门课程第二讲之怎么运行Python,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 对python 矩阵转置transpose的实例讲解

    对python 矩阵转置transpose的实例讲解

    下面小编就为大家分享一篇对python 矩阵转置transpose的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python subprocess模块功能与常见用法实例详解

    Python subprocess模块功能与常见用法实例详解

    这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能、常用函数相关使用技巧,需要的朋友可以参考下
    2018-06-06
  • Python读写锁实现实现代码解析

    Python读写锁实现实现代码解析

    这篇文章主要介绍了Python读写锁实现实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python3多线程版TCP端口扫描器

    Python3多线程版TCP端口扫描器

    这篇文章主要为大家详细介绍了Python3多线程版TCP端口扫描器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • python字符串string的内置方法实例详解

    python字符串string的内置方法实例详解

    这篇文章主要介绍了python字符串string的内置方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • python使用matplotlib绘制热图

    python使用matplotlib绘制热图

    这篇文章主要为大家详细介绍了python使用matplotlib绘制热图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python各层级目录下import方法代码实例

    python各层级目录下import方法代码实例

    这篇文章主要介绍了python各层级目录下import方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python3.6.8 + pycharm + PyQt5 环境搭建的图文教程

    python3.6.8 + pycharm + PyQt5 环境搭建的图文教程

    这篇文章主要介绍了python3.6.8 + pycharm + PyQt5 环境搭建,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论