用Pandas处理当当网图书数据:从混乱CSV到清晰报表的保姆级实战

张开发
2026/4/16 7:01:06 15 分钟阅读

分享文章

用Pandas处理当当网图书数据:从混乱CSV到清晰报表的保姆级实战
用Pandas处理当当网图书数据从混乱CSV到清晰报表的保姆级实战当你从电商平台导出销售数据时是否经常遇到这样的场景打开CSV文件后发现数据杂乱无章——缺失值随处可见、日期格式五花八门、文本字段包含多余字符、数值列混入了非数字内容。作为一位长期与电商数据打交道的分析师我想分享一个真实案例如何用Pandas将当当网的原始图书销售数据转化为可供分析的整洁数据集。这份数据包含了2000条图书记录涉及书名、作者、出版日期、折扣比例等关键字段。原始数据的问题非常典型作者信息缺失、日期格式不统一、折扣字段包含折字符、推荐值以百分比形式存在。下面我将带您一步步解决这些问题并解释每个处理步骤背后的业务考量。1. 数据加载与初步观察在开始清洗前我们需要先了解数据的整体状况。使用Pandas的read_csv加载数据是最基础的一步import pandas as pd from datetime import datetime # 显示所有列 pd.set_option(display.max_columns, None) # 加载数据 data pd.read_csv(当当网畅销图书榜单数据.csv)初步观察数据时有几个关键检查点缺失值分布哪些列存在缺失缺失比例如何数据类型各列的实际类型是否与预期一致异常值是否存在明显不合理的数据点通过data.info()和data.describe()可以快速获取这些信息。在我们的案例中电子书价格列缺失严重超过50%这是决定是否保留该列的重要依据。2. 处理缺失值与特定记录修正缺失值处理是数据清洗的核心环节之一。不同列的缺失需要采用不同策略2.1 关键字段的手动补全对于书名等重要字段我们可以针对特定记录进行精确补全# 补全特定图书的作者和出版日期 data.loc[data[书名]一级建造师2020教材2020版一级建造师建筑工程管理与实务, [作者]] 全国一级建造师执业资格考试用书编写委员会 data.loc[data[书名]一级建造师2020教材2020版一级建造师建筑工程管理与实务, 出版日期] 2020-05-01 data.loc[data[书名]中国共产党简史32开2021党史学习教育系列读物领导干部学习指, 作者] 中国共产党简史编写组 data.loc[data[书名]写给青少年的古文观止全套5册正版小古文小学初中高中注音详解注释, 作者] 伊泽这种精确补全方式适用于已知特定记录缺失值的情况能保证数据准确性。2.2 高缺失率列的删除决策当某列缺失率过高时删除可能是更合理的选择# 删除电子书价格列缺失率过高 data.drop(columns[电子书价格], inplaceTrue)业务考量电子书价格缺失超过50%保留该列会导致分析偏差且无法通过简单插补获得可靠值。2.3 数值型缺失值的智能填充对于评论数等数值列我们采用平均值填充# 填充评论数缺失值为平均值 data[评论数] data[评论数].fillna(data[评论数].mean())同时对于推荐值为0%的异常情况我们将其替换为100%data[推荐值] data[推荐值].replace(0%, 100%)3. 数据类型转换与格式标准化原始数据中的类型问题非常普遍需要进行系统性的格式转换。3.1 字符串清理与数值转换处理折扣比例和推荐值字段# 折扣比例移除折字符并转为浮点数 data[折扣比例] data[折扣比例].str.replace(折, ).astype(float) # 推荐值移除百分号并转为浮点数 data[推荐值] data[推荐值].str.replace(%, ).astype(float)3.2 日期格式的统一处理出版日期字段存在多种格式需要统一# 将出版日期转为标准日期格式再格式化为中文显示 data[出版日期] pd.to_datetime(data[出版日期]).dt.strftime(%Y年%m月%d日)3.3 排行榜类型的清理处理排行榜类型中的冗余字符# 移除年字并转为整数 data[排行榜类型] data[排行榜类型].str.replace(年, ).astype(int)4. 数据排序与索引重置清洗后的数据需要进行合理排序和索引整理# 按推荐值降序排序 data.sort_values(by推荐值, ascendingFalse, inplaceTrue) # 重置索引 data.index [i for i in range(len(data))]5. 数据分析与洞察提取清洗后的数据已经可以进行有意义的分析了。以下是两个简单的分析示例5.1 最畅销图书统计# 找出出版次数最多的图书 top_book data[书名].value_counts().idxmax() count data[书名].value_counts().max() print(f出版次数最多的图书是《{top_book}》共出现了{count}次)5.2 作者多样性分析# 统计唯一作者数量 author_count data[作者].nunique() print(f数据集中共有{author_count}位不同的作者)6. 实战技巧与常见陷阱在实际操作中有几个容易忽视但非常重要的细节链式操作的风险避免连续使用多个方法调用如data.str.replace().astype()这可能导致难以调试的错误。分步操作更安全。内存管理处理大型数据集时及时使用del删除不再需要的中间变量或考虑使用dtype参数优化内存占用。处理性能对于超大数据集可以考虑使用chunksize参数分块读取尝试modin.pandas替代标准Pandas对字符串列使用category类型验证转换结果每次重要转换后都应抽样检查结果是否符合预期# 检查折扣比例转换结果 print(data[折扣比例].sample(5))保存中间结果复杂的清洗流程中建议定期保存中间结果# 保存清洗后的数据 data.to_csv(cleaned_book_data.csv, indexFalse, encodingutf-8-sig)7. 扩展思考自动化清洗流程对于定期更新的数据集可以考虑构建自动化清洗管道def clean_book_data(raw_data): # 实现所有清洗步骤 cleaned_data raw_data.copy() # ...各清洗步骤... return cleaned_data # 使用管道处理新数据 new_data pd.read_csv(new_book_data.csv) cleaned_new_data clean_book_data(new_data)更进一步可以创建配置驱动的清洗系统将清洗规则存储在JSON或YAML文件中实现完全可配置的清洗流程。

更多文章