1. 为什么需要这样做?
想象一下,你是一个“数据工厂”的工程师。你需要分析和组织原材料(数据),以生成最终产品(洞察力、报告)。如果不进行清理和格式化,你的数据会像一堆散乱的零件,很难拼凑出什么有用的东西。
干净并格式化过的数据,不仅仅是美观和易读的问题,更是正确分析和建模的重要条件。错误处理的数据可能导致错误的结论,而没人想经历一整天的工作后发现自己计算的员工平均年龄是基于一堆不连贯的数据片段。
格式化的主要任务
在开始写代码之前,我们先来了解一下,通过格式化可以避免和解决哪些问题:
- 删除空行和空列: 它们就像空口袋 — 没有用,还会误导我们。
- 删除重复项: 重复的记录会给数据带来“噪声”。
- 填充缺失值: 这些像奶酪上的洞,有时候需要用一些“美味”的东西填补。
- 数据类型转换: 确保年龄是数字,而不是文本。这样就不会把年龄和“25年工作经验”这样的描述混淆。
2. 数据清理和格式化工具
现在我们知道了这样做的必要性,接下来看一下有哪些工具可以帮助我们,就像瑞士军刀在户外探险一样:
-
删除空值:
dropna()
-
处理重复项:
duplicated()
和drop_duplicates()
- 填充缺失值:
fillna()
-
数据类型转换:
astype()
删除空值
空值总是在最不合时宜的时候出现,用
dropna()
可以把它们清理掉,就像扔掉旧袜子一样。看个例子:
import pandas as pd
# 创建带有缺失值的 DataFrame
data = {'姓名': ['安娜', '伊万', None, '玛丽亚'],
'年龄': [29, None, 34, 23],
'城市': ['莫斯科', '圣彼得堡', '新西伯利亚', None]}
df = pd.DataFrame(data)
# 删除含有任何 NaN 值的行
cleaned_df = df.dropna()
print(cleaned_df)
这段代码会删除任何包含空值的行。
处理重复项
有时你的数据中会出现重复,就像在“找不同”游戏中,根本找不到不同。用 drop_duplicates()
可以筛掉这些记录。
# 创建带有重复项的 DataFrame
data = {'姓名': ['安娜', '伊万', '安娜', '玛丽亚'],
'年龄': [29, 34, 29, 23]}
df = pd.DataFrame(data)
# 删除重复项
unique_df = df.drop_duplicates()
print(unique_df)
填充缺失值
填充空值有很多方式,比如用平均值或者固定值。fillna()
方法可以帮助你:
# 使用列的平均值填充 '年龄' 中的缺失值
df['年龄'] = df['年龄'].fillna(df['年龄'].mean())
print(df)
数据类型转换
数据类型转换是为了避免在需要数字的地方意外使用了文本:
# 将 '年龄' 列的数据类型转换为整数
df['年龄'] = df['年龄'].astype(int)
print(df)
3. 实践应用:清理实际数据集
让我们试试清理并格式化一个实际的数据集,比如一个包含销售信息的假设 Excel 文件。
# 从 Excel 加载数据
filename = "sales_data.xlsx"
df = pd.read_excel(filename)
# 删除任何列中有缺失值的行
df = df.dropna()
# 删除重复记录
df = df.drop_duplicates()
# 填充缺失的销售额列项为列的平均值
df['销售额'] = df['销售额'].fillna(df['销售额'].mean())
# 转换数据类型
df['产品代码'] = df['产品代码'].astype(str)
# 将格式化后的数据保存回 Excel
df.to_excel("cleaned_sales_data.xlsx", index=False)
结果是,我们会得到一个整洁的 Excel 文件,准备好进行分析和生成报告。
4. 数据清理中的常见错误
就像修理电子设备,清理数据时总有可能出现失误。以下是需要避免的一些常见错误。
误删有用信息。在删除重复项时,有时重复可能是数据错误的信号,应该先弄清它们的本质问题。不要混淆数据类型。有时候直接转换格式看似简单,但如果不验证是否合理,这可能导致数据丢失。
遵循这些建议并执行上述步骤,你会发现,处理数据轻松又愉快,即使最初它们像是分析师的噩梦。记住,数据如同你的代码,都需要保持整洁!
GO TO FULL VERSION