首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 20个数据清洗技巧,提升数据质量

Python 20个数据清洗技巧,提升数据质量

作者头像
用户11081884
发布2026-07-20 17:29:49
发布2026-07-20 17:29:49
330
举报

数据清洗是数据分析流程中不可或缺的环节,高质量的数据分析才有价值。本文介绍20个实用的Python数据清洗技巧,帮助高效处理各种数据质量问题。

1. 检测缺失值

代码语言:javascript
复制
import pandas as pd
import numpy as np

data = {'A': [1, 2, np.nan, 4], 'B': ['x', np.nan, 'z', 'w'], 'C': [5, 6, 7, 8]}
df = pd.DataFrame(data)

# 检测每列的缺失值数量
missing_values = df.isnull().sum()
print("缺失值统计:\n", missing_values)

2. 删除缺失值

代码语言:javascript
复制
# 删除包含缺失值的行
df_drop_rows = df.dropna()
print("删除含缺失值的行:\n", df_drop_rows)

# 删除包含缺失值的列
df_drop_cols = df.dropna(axis=1)
print("删除含缺失值的列:\n", df_drop_cols)

3. 填充缺失值

代码语言:javascript
复制
# 用列平均值填充数值型缺失值
df_fill_mean = df.fillna(df.mean())
print("用平均值填充:\n", df_fill_mean)

# 用前一个有效值填充
df_fill_forward = df.fillna(method='ffill')
print("前向填充:\n", df_fill_forward)

4. 去除重复值

代码语言:javascript
复制
data = {'name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'], 
        'age': [25, 30, 25, 35, 30]}
df = pd.DataFrame(data)

# 去除完全重复的行
df_no_duplicates = df.drop_duplicates()
print("去重后的数据:\n", df_no_duplicates)

5. 基于列去除重复值

代码语言:javascript
复制
data = {'name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'], 
        'age': [25, 30, 25, 35, 30]}
df = pd.DataFrame(data)

# 去除完全重复的行
df_no_duplicates = df.drop_duplicates()
print("去重后的数据:\n", df_no_duplicates)

6. 文本数据标准化

代码语言:javascript
复制
text_data = {'text': ['  Python ', 'JAVA  ', '  C++ ', 'R ']}
df_text = pd.DataFrame(text_data)

# 去除空格并转为小写
df_text['cleaned'] = df_text['text'].str.strip().str.lower()
print("清洗后的文本:\n", df_text)

7. 正则表达式清洗

代码语言:javascript
复制
# 移除文本中的数字和特殊字符
df_text['regex_cleaned'] = df_text['text'].str.replace(r'[^a-zA-Z\s]', '', regex=True)
print("正则清洗后的文本:\n", df_text)

8. 数据类型转换

代码语言:javascript
复制
mixed_data = {'numbers': ['1', '2', '3', '4'], 'booleans': ['True', 'False', 'True', 'False']}
df_mixed = pd.DataFrame(mixed_data)

# 转换数据类型
df_mixed['numbers'] = df_mixed['numbers'].astype(int)
df_mixed['booleans'] = df_mixed['booleans'].astype(bool)
print("转换后的数据类型:\n", df_mixed.dtypes)

9. 日期时间格式化

代码语言:javascript
复制
date_data = {'dates': ['2023-01-01', '01/02/2023', 'March 3, 2023', '04-04-2023']}
df_dates = pd.DataFrame(date_data)

# 统一日期格式
df_dates['formatted'] = pd.to_datetime(df_dates['dates'], errors='coerce')
print("标准化的日期:\n", df_dates)

10. 离群值检测与处理

代码语言:javascript
复制
import numpy as np
from scipy import stats

data = {'values': [10, 12, 11, 15, 10, 100, 9, 12, 11, 10]}
df_outliers = pd.DataFrame(data)

# 使用Z-score检测离群值
z_scores = np.abs(stats.zscore(df_outliers['values']))
df_outliers['is_outlier'] = z_scores > 2
print("离群值检测结果:\n", df_outliers)

11. 分箱离散化

代码语言:javascript
复制
ages = [22, 25, 30, 35, 40, 45, 50, 55, 60, 65]
df_ages = pd.DataFrame({'age': ages})

# 将年龄分箱
bins = [20, 30, 40, 50, 60, 70]
labels = ['20s', '30s', '40s', '50s', '60s']
df_ages['age_group'] = pd.cut(df_ages['age'], bins=bins, labels=labels)
print("年龄分箱结果:\n", df_ages)

12. 数据标准化

代码语言:javascript
复制
from sklearn.preprocessing import StandardScaler

data = {'feature1': [100, 200, 300, 400, 500], 
        'feature2': [0.1, 0.2, 0.3, 0.4, 0.5]}
df_scale = pd.DataFrame(data)

# 标准化数据
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df_scale)
df_scaled = pd.DataFrame(scaled_data, columns=df_scale.columns)
print("标准化后的数据:\n", df_scaled)

13. 分类数据编码

代码语言:javascript
复制
categories = ['red', 'blue', 'green', 'blue', 'red', 'green']
df_cat = pd.DataFrame({'color': categories})

# 独热编码
df_encoded = pd.get_dummies(df_cat, columns=['color'])
print("独热编码结果:\n", df_encoded)

14. 表合并与连接

代码语言:javascript
复制
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})

# 内连接
df_inner = pd.merge(df1, df2, on='key', how='inner')
print("内连接结果:\n", df_inner)

# 左连接
df_left = pd.merge(df1, df2, on='key', how='left')
print("左连接结果:\n", df_left)

15. 数据透视与重塑

代码语言:javascript
复制
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})

# 内连接
df_inner = pd.merge(df1, df2, on='key', how='inner')
print("内连接结果:\n", df_inner)

# 左连接
df_left = pd.merge(df1, df2, on='key', how='left')
print("左连接结果:\n", df_left)

16. 处理缺失值

缺失值处理有多种策略,包括删除、填充等。

代码语言:javascript
复制
# 创建含缺失值的数据
data = {'A': [1, 2, None, 4], 'B': [5, None, 7, 8]}
df = pd.DataFrame(data)

# 用列均值填充缺失值
df_filled = df.fillna(df.mean())
print(df_filled)

17. 字符串模式匹配与提取

使用正则表达式提取特定模式的数据。

代码语言:javascript
复制
# 创建含缺失值的数据
data = {'A': [1, 2, None, 4], 'B': [5, None, 7, 8]}
df = pd.DataFrame(data)

# 用列均值填充缺失值
df_filled = df.fillna(df.mean())
print(df_filled)

18. 时间序列重采样

对时间序列数据进行重采样。

代码语言:javascript
复制
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
data = {'date': date_rng, 'value': range(10)}
df = pd.DataFrame(data).set_index('date')

# 按3天重采样并求和
resampled = df.resample('3D').sum()
print(resampled)

19. 处理嵌套JSON数据

展平嵌套的JSON数据结构。

代码语言:javascript
复制
import json
from pandas import json_normalize

json_data = '''
{
  "employees": [
    {
      "name": "John",
      "age": 30,
      "address": {
        "city": "New York",
        "zip": "10001"
      }
    }
  ]
}
'''

data = json.loads(json_data)
df = json_normalize(data['employees'])
print(df)

20. 数据验证与约束

为数据添加验证规则。

代码语言:javascript
复制
from pandera import DataFrameSchema, Column, Check

schema = DataFrameSchema({
    "age": Column(int, Check(lambda x: x >= 18)),
    "email": Column(str, Check(lambda x: "@" in x))
})

data = {'age': [25, 30, 17], 'email': ['a@b.com', 'c@d.com', 'invalid']}
df = pd.DataFrame(data)

# 验证数据
try:
    schema.validate(df)
except Exception as e:
    print("数据验证失败:", e)

20个Python数据清洗技巧涵盖了数据预处理中最常见的场景,从缺失值处理到数据转换,从文本清洗到表合并。掌握这些技巧可以显著提高数据分析效率和数据质量。在实际项目中需要组合使用多个技巧来处理复杂的数据质量问题来达到最佳清洗效果。

“无他,惟手熟尔”!有需要的用起来。

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!😊

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 检测缺失值
  • 2. 删除缺失值
  • 3. 填充缺失值
  • 4. 去除重复值
  • 5. 基于列去除重复值
  • 6. 文本数据标准化
  • 7. 正则表达式清洗
  • 8. 数据类型转换
  • 9. 日期时间格式化
  • 10. 离群值检测与处理
  • 11. 分箱离散化
  • 12. 数据标准化
  • 13. 分类数据编码
  • 14. 表合并与连接
  • 15. 数据透视与重塑
  • 16. 处理缺失值
  • 17. 字符串模式匹配与提取
  • 18. 时间序列重采样
  • 19. 处理嵌套JSON数据
  • 20. 数据验证与约束
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档