在AI产品开发过程中,数据是最重要的资产之一。自动化数据处理能够帮助我们:
- 提高效率:自动化处理海量数据,无需人工逐条处理。
- 确保数据质量:自动化的数据清洗和预处理能大大提升数据准确性。
- 节省人力成本:通过编写自动化脚本,减少重复劳动,让团队专注于更有价值的工作。
尤其在 AI 数据准备阶段,数据清洗、合并和分析是基础而关键的步骤。使用 Python 的 pandas 库,可以快速高效地处理这些任务。这是一个强大的数据分析库,专门用于处理结构化数据。它提供了高效的数据结构,如DataFrame和Series,可以轻松地进行数据清洗、操作、分析和可视化。Pandas 支持从多种文件格式(如 CSV、Excel、SQL 数据库等)中读取数据,并提供了丰富的功能来处理缺失值、合并数据集、分组统计和时间序列分析等任务,是AI产品经理的常用“武器”之一。
数据清洗与预处理是自动化数据处理的重要环节。下面我们介绍几个常见的数据处理方法:
首先是处理缺失值
- 填充缺失值:使用 `fillna()` 方法可以用指定值或方法(例如均值、中位数)填充缺失值。
提示词示例:
提示词:
请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中存在缺失值的列,计算每一列的均值,并用相应列的均值替换缺失值。请将填充缺失值后的数据保存到新文件 filled_example.csv 中。同时,请在代码中加入异常处理,并在处理完成后输出提示信息。
示例代码:
import pandas as pd
try:
# 读取 CSV 文件
df = pd.read_csv('example.csv')
print("成功读取 'example.csv' 文件。")
# 使用每一列的均值填充缺失值
df_filled = df.fillna(df.mean())
print("缺失值已使用各列的均值填充。")
# 将填充后的数据保存到新文件
df_filled.to_csv('filled_example.csv', index=False)
print("填充后的数据已保存为 'filled_example.csv'.")
except Exception as e:
print(f"处理过程中发生错误:{e}")
代码说明:
- 使用
pd.read_csv()读取 CSV 文件; - 通过
df.fillna(df.mean())计算每列均值并填充缺失值; - 使用
to_csv()方法将处理后的 DataFrame 保存到新文件中; - 代码中加入了异常处理,以便在读取、处理或保存数据时出现问题时给出错误提示。
- 删除缺失值:使用 `dropna()` 方法可以删除包含缺失值的行或列。
提示词示例:
提示词:
请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中存在缺失值的行,请使用 dropna() 方法删除这些行,并将删除缺失值后的数据保存到新文件 cleaned_example.csv 中。请在代码中加入异常处理,确保在处理过程中如果出现错误能够给出详细的错误提示。
示例代码:
import pandas as pd
try:
# 读取 CSV 文件
df = pd.read_csv('example.csv')
print("成功读取 'example.csv' 文件。")
# 删除包含缺失值的行
df_cleaned = df.dropna()
print("已删除包含缺失值的行。")
# 将处理后的数据保存到新文件
df_cleaned.to_csv('cleaned_example.csv', index=False)
print("处理后的数据已保存为 'cleaned_example.csv'.")
except Exception as e:
print(f"处理过程中发生错误:{e}")
代码说明:
- 使用
pd.read_csv()读取 CSV 文件; - 通过
df.dropna()删除所有包含缺失值的行; - 使用
to_csv()方法将处理后的 DataFrame 保存到新文件中; - 加入异常处理,以便在读取、处理或保存数据时出现问题时给出错误提示。
数据清洗中的另一种常见情况是数据类型转换。
- 数据类型转换:由于不同数据来源格式可能不一致,需要用 `astype()` 将数据转换为合适的类型,确保后续分析的准确性。
提示词示例:
提示词:
请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。假设文件中有一列名为 "age" 的数据,该列的数据类型可能不是整数。请使用 astype() 方法将 "age" 列的数据转换为整数类型,并将转换后的数据保存到新文件 converted_example.csv 中。请在代码中加入异常处理,确保在处理过程中出现错误时能够输出详细的错误提示。
示例代码:
import pandas as pd
try:
# 读取 CSV 文件
df = pd.read_csv('example.csv')
print("成功读取 'example.csv' 文件。")
# 将 "age" 列转换为整数类型
df['age'] = df['age'].astype(int)
print("成功将 'age' 列转换为整数类型。")
# 保存转换后的数据到新文件
df.to_csv('converted_example.csv', index=False)
print("转换后的数据已保存为 'converted_example.csv'.")
except Exception as e:
print(f"处理过程中发生错误:{e}")
代码说明:
- 使用
pd.read_csv()读取 CSV 文件; - 利用
astype(int)将 “age” 列转换为整数类型; - 使用
to_csv()方法将转换后的 DataFrame 保存到新文件; - 使用 try-except 块进行异常捕获,以便在读取、转换或保存数据时发生错误时输出详细的错误信息。
此外,重复值处理也是很常见的情况。
- 去重:数据中可能存在重复记录,使用 `drop_duplicates()` 方法可以删除重复数据,保证数据集唯一性。
提示词示例:
提示词:
请编写一个 Python 脚本,使用 pandas 读取名为 example.csv 的 CSV 文件。对于数据中可能存在的重复记录,请使用 drop_duplicates() 方法删除所有重复的行,确保数据集唯一性。请将处理后的数据保存到新文件 deduplicated_example.csv 中,同时在代码中加入异常处理,以便在处理过程中发生错误时输出详细的错误提示。
示例代码:
import pandas as pd
try:
# 读取 CSV 文件
df = pd.read_csv('example.csv')
print("成功读取 'example.csv' 文件。")
# 删除所有重复的记录
df_dedup = df.drop_duplicates()
print("已删除重复的记录。")
# 将处理后的数据保存到新文件
df_dedup.to_csv('deduplicated_example.csv', index=False)
print("处理后的数据已保存为 'deduplicated_example.csv'.")
except Exception as e:
print(f"处理过程中发生错误:{e}")
代码说明:
- 使用
pd.read_csv()读取 CSV 文件; - 通过
drop_duplicates()方法删除所有重复的行,确保数据集唯一性; - 使用
to_csv()方法将去重后的数据保存到新文件中; - 使用 try-except 块进行异常捕获,确保在读取、处理或保存数据过程中发生错误时输出详细的错误信息。
还有就是异常值处理,包括:
- 异常值检测:可以结合箱线图等方法检测异常值。
- 异常值替换或删除:异常值可能影响数据分析结果,可通过替换或删除来处理异常值。
提示词示例:
提示词:
请编写一个 Python 脚本,使用 pandas 读取名为 data.csv 的数据文件。假设数据中有一列名为 "value" 的数值数据。请利用箱线图的方法检测 "value" 列中的异常值(即低于 Q1 - 1.5IQR 或高于 Q3 + 1.5IQR 的值),并将这些异常值替换为该列的中位数。请将处理后的数据保存为 processed_data.csv,并绘制处理前后 "value" 列的箱线图以供对比。同时,在代码中加入异常处理,确保在处理过程中如果出现错误能够输出详细的错误提示。
示例代码:
import pandas as pd
import matplotlib.pyplot as plt
try:
# 读取数据文件
df = pd.read_csv('data.csv')
print("成功读取 'data.csv' 文件。")
# 选择需要检测异常值的列
col = "value"
# 绘制原始数据的箱线图,观察异常值分布
plt.figure(figsize=(6, 4))
plt.boxplot(df[col], vert=False)
plt.title("原始数据箱线图")
plt.xlabel(col)
plt.show()
# 计算第一四分位数 (Q1) 和第三四分位数 (Q3)
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1 # 四分位距
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 计算中位数
median_value = df[col].median()
# 替换异常值:若数值小于 lower_bound 或大于 upper_bound,则替换为中位数
df[col] = df[col].apply(lambda x: median_value if x < lower_bound or x > upper_bound else x)
print("已将异常值替换为中位数。")
# 绘制处理后数据的箱线图,验证异常值处理效果
plt.figure(figsize=(6, 4))
plt.boxplot(df[col], vert=False)
plt.title("处理后数据箱线图")
plt.xlabel(col)
plt.show()
# 将处理后的数据保存到新文件
df.to_csv('processed_data.csv', index=False)
print("处理后的数据已保存为 'processed_data.csv'。")
except Exception as e:
print(f"处理过程中发生错误:{e}")
代码说明:
- 数据读取:使用
pd.read_csv()从data.csv文件中读取数据。 - 箱线图绘制:利用 matplotlib 绘制原始数据的箱线图,直观显示异常值分布。
- 异常值检测:计算 Q1、Q3 和 IQR,利用常见的 1.5*IQR 规则确定异常值的下界和上界。
- 异常值处理:使用
apply()对指定列中的数据进行检查,将超出上下界的异常值替换为中位数。 - 结果对比:绘制处理后数据的箱线图以验证效果,并将处理后的数据保存到
processed_data.csv文件中。 - 异常处理:利用 try-except 块捕获过程中可能发生的错误,并输出详细的错误信息。
练习:
假设示例中的example.csv是一个每天会生成的文件,请撰写提示词,让AI模型编写一个自动化脚本,完成:
- 删除重复记录的,并记录在以日期命名的日志文件中。
- 改用中位数(df.median())填充填充缺失值,并记录在以日期命名的日志文件中。
- 将新生成的csv文件保存为以日期命名的新文件。
AI 助教
提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。
