9 个pandas必备清洗数据技巧

数据清洗是数据分析流程中至关重要的一步.在数据科学和机器学习项目中,Pandas 是一个强大且常用的库,它能够帮助你快速处理和清洗数据.以下是 Pandas 数据清洗的 10 个必备技巧,助你高效处理常见的数据质量问题.

1. 处理缺失数据

缺失数据是数据清洗中最常见的问题之一.Pandas 提供了isnull()notnull() 方法来检测缺失值,dropna() 用于删除缺失值,fillna() 用于填充缺失值.

import pandas as pd

# 创建包含缺失值的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [None, 2, 3, 4],
    'C': [1, None, None, 4]
})

# 删除包含缺失值的行
df_cleaned = df.dropna()

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

2. 删除重复数据

重复数据会影响分析结果,因此需要清除.可以使用 duplicated()drop_duplicates() 方法来识别和删除重复行.

# 创建包含重复行的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 2, 4],
    'B': [5, 6, 6, 8]
})

# 删除重复行
df_unique = df.drop_duplicates()
print(df_unique)

3. 数据类型转换

有时列的数据类型不符合分析需求,Pandas 提供了 astype() 方法来转换数据类型.例如,将字符串类型转换为日期类型.

df = pd.DataFrame({
    'date': ['2021-01-01', '2021-02-01', '2021-03-01']
})

# 将字符串转换为日期类型
df['date'] = pd.to_datetime(df['date'])
print(df.dtypes)

4. 处理异常值

异常值是指在数据集中偏离正常范围的值,通常需要处理.Pandas 提供了方法可以方便地检测并处理这些值.

import numpy as np

# 创建包含异常值的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 1000, 5]
})

# 使用条件来替换异常值
df['A'] = np.where(df['A'] > 100, df['A'].median(), df['A'])
print(df)

5. 字符串清理

数据集中可能包含带有不必要空格或符号的字符串.Pandas 提供了许多字符串处理方法,如 str.strip() 去除空格、str.lower() 转换为小写等.

df = pd.DataFrame({
    'name': [' Alice ', 'Bob', ' Charlie ']
})

# 去除字符串的前后空格
df['name'] = df['name'].str.strip()
print(df)

6. 分列和合并列

在数据处理过程中,可能需要将一个列分成多个列,或者将多个列合并为一个列.str.split() 用于分列,+agg() 用于合并列.

# 创建包含全名的 DataFrame
df = pd.DataFrame({
    'full_name': ['Alice Smith', 'Bob Brown']
})

# 将全名分成两列
df[['first_name', 'last_name']] = df['full_name'].str.split(' ', expand=True)
print(df)

# 合并列
df['full_name'] = df['first_name'] + ' ' + df['last_name']
print(df)

7. 处理日期数据

处理日期数据是数据清洗的重要环节.Pandas 提供了 pd.to_datetime() 函数将字符串转换为日期,并能通过 .dt 属性提取年、月、日等.

# 创建包含日期的 DataFrame
df = pd.DataFrame({
    'date': ['2023-01-01', '2023-06-15']
})

# 转换为日期类型
df['date'] = pd.to_datetime(df['date'])

# 提取年份和月份
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
print(df)

8. 映射与替换

map()replace() 可以用于根据规则转换列中的值.它们适用于将分类变量转换为数值编码或替换某些特定值.

# 创建包含类别的 DataFrame
df = pd.DataFrame({
    'gender': ['Male', 'Female', 'Female', 'Male']
})

# 将类别映射为数值
df['gender_code'] = df['gender'].map({'Male': 1, 'Female': 0})
print(df)

9. 按条件筛选数据

根据特定条件对数据进行筛选是常见需求.可以使用布尔索引或 query() 方法来实现条件筛选.

# 创建 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50]
})

# 筛选 A 列大于 2 的行
df_filtered = df[df['A'] > 2]
print(df_filtered)

# 或使用 query() 方法
df_filtered = df.query('A > 2')
print(df_filtered)

通过掌握这些 Pandas 数据清洗技巧,你将能够更加高效地处理不完整、不准确或异常的数据.清洗后的数据质量直接决定分析结果的可靠性,因此这些技巧将帮助你在实际项目中更加从容地应对复杂的数据问题.

 

感谢大家的关注和支持!想了解更多编程精彩知识内容,请关注我的微信公众号:Python小胡子,有最新最前沿的的知识和人工智能AI与大家共享,同时,如果你觉得这篇文章对你有帮助,不妨点个赞,并点击关注.动动你发财的手,万分感谢!!!

原创文章不易,求点赞、在看、转发或留言,这样对我创作下一个精美文章会有莫大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python茶水实验室

你的关注,是我创作的最大动力.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值