用Pandas处理当当网图书数据:手把手教你搞定缺失值、类型转换和字符串清洗(附完整代码)

张开发
2026/4/9 21:55:21 15 分钟阅读

分享文章

用Pandas处理当当网图书数据:手把手教你搞定缺失值、类型转换和字符串清洗(附完整代码)
用Pandas处理当当网图书数据从数据清洗到商业洞察的完整实战指南翻开当当网的畅销书榜单每一行数据背后都藏着读者的选择与市场的脉搏。但原始数据往往像未经打磨的钻石——价值连城却杂乱无章。本文将带你用Pandas这把专业刻刀完成从数据清洗到商业价值挖掘的全流程实战特别适合电商运营、内容分析从业者及Python数据分析初学者。我们会重点解决三个核心问题如何智能处理缺失值怎样高效完成类型转换字符串清洗有哪些高阶技巧1. 数据清洗前的战略准备拿到一份2000行的当当网畅销书数据时专业分析师的第一反应不是立即写代码而是先做数据诊断。用data.info()快速扫描你会发现这些典型问题作者列存在明显缺失特别是特定政治读物和教辅书籍电子书价格列超过80%为空值出版日期格式混乱有2020-05-01也有2019年11月01日折扣比例带着折字符如7.5折推荐值同时存在0%和100%等异常值关键预处理步骤import pandas as pd pd.set_option(display.max_columns, None) data pd.read_csv(dangdang_top_books.csv) # 初始数据快照 print(f数据集形状{data.shape}) print(\n前3行样本) display(data.head(3))输出结果会显示各列的数据类型和缺失情况。这时候应该建立自己的数据质量评估表字段名缺失比例异常值类型处理优先级预计处理方法作者5.2%特定书籍规则缺失高条件填充电子书价格82%系统性缺失中整列删除推荐值0.3%存在0%高替换异常值折扣比例0%带折字符低字符串处理实战经验电子书价格列看似重要但当缺失超过80%时填充反而会引入更大偏差。这时果断删除才是专业选择用data.drop(columns[电子书价格], inplaceTrue)一步到位。2. 缺失值处理的智能策略处理缺失值不是简单地用均值填充而是要根据业务场景制定分层处理方案。当当网图书数据中我们发现三类特殊缺失2.1 规则型缺失特定书籍的智能填充教辅书籍和政治读物往往有固定编写组这其实不是真正的缺失。用loc条件定位比全局填充更精准# 建立书名-作者映射规则 author_rules { 一级建造师2020教材: 全国一级建造师执业资格考试用书编写委员会, 中国共产党简史: 中国共产党简史编写组, 古文观止全套5册: 伊泽 } for pattern, author in author_rules.items(): mask data[书名].str.contains(pattern, naFalse) data.loc[mask, 作者] author为什么优于原文方案使用str.contains模糊匹配避免书名微小差异导致的漏判规则集中管理方便后续维护扩展自动跳过非缺失值避免覆盖已有数据2.2 数值型缺失动态填充策略评论数缺失适合用均值填充但要注意分组特征。比如教辅类和社会类图书的评论行为差异很大# 先按图书类别分组计算均值 category_means data.groupby(类别)[评论数].mean() # 再用分组均值填充 data[评论数] data.apply( lambda row: category_means[row[类别]] if pd.isna(row[评论数]) else row[评论数], axis1 ).astype(int)2.3 异常值转化业务逻辑优先推荐值出现0%明显是数据采集错误根据业务常识应替换为100%data[推荐值] data[推荐值].replace(0%, 100%)避坑指南不要直接astype(float)处理百分比要先去掉%字符。建议分步操作data[推荐值] data[推荐值].str.replace(%, ).astype(float) / 1003. 类型转换的工业级解决方案原始数据中藏着各种类型陷阱需要系统化的转换策略。3.1 日期格式统一化实战出版日期存在两种格式混用的情况最佳实践是def standardize_date(date_str): try: # 尝试解析为年-月-日格式 return pd.to_datetime(date_str).strftime(%Y-%m-%d) except ValueError: # 处理中文格式日期 return pd.to_datetime( date_str.str.replace(年, -) .str.replace(月, -) .str.replace(日, ), format%Y-%m-%d ).strftime(%Y-%m-%d) data[出版日期] data[出版日期].apply(standardize_date)关键改进点自动识别两种日期格式统一输出为ISO标准格式保留原始错误处理能力3.2 字符串与数值的智能转换折扣比例需要去除折字后转浮点数但要注意data[折扣比例] ( data[折扣比例] .str.extract((\d\.?\d*))[0] # 提取数字部分 .astype(float) .div(10) # 7.5折转为0.75 )对比原始方案优势正则提取更健壮兼容7折、7.5折等变体自动转换为0-1区间值便于后续分析保留原始数据中的小数点精度4. 字符串清洗的高阶技巧图书数据中的字符串处理远不止简单的替换需要多层处理。4.1 书名关键词提取通过拆分书名获取关键信息# 提取括号内的版本信息 data[版本信息] data[书名].str.extract(r(.*?)) # 获取核心书名去除副标题 data[核心书名] data[书名].str.split(r[_]).str[0]4.2 作者信息标准化中文作者名常有多种写法需要统一# 去除作者名中的空格和特殊字符 data[作者] ( data[作者] .str.replace(r\s, , regexTrue) .str.replace(r[编著], , regexTrue) ) # 识别并标记机构作者 data[作者类型] np.where( data[作者].str.contains(委员会|编写组|工作室), 机构, 个人 )5. 从清洗到洞察商业价值挖掘完成清洗后数据已经准备好回答关键业务问题最畅销图书分析top_books ( data.groupby(核心书名) .agg({评论数: sum, 折扣比例: mean}) .sort_values(评论数, ascendingFalse) .head(10) )作者生产力分析author_stats ( data.groupby(作者) .agg(作品数(书名, count), 平均评分(推荐值, mean)) .query(作品数 1) .sort_values(作品数, ascendingFalse) )出版趋势分析import matplotlib.pyplot as plt data[出版年份] pd.to_datetime(data[出版日期]).dt.year yearly_counts data[出版年份].value_counts().sort_index() plt.figure(figsize(10, 6)) yearly_counts.plot(kindbar) plt.title(年度出版数量趋势) plt.xlabel(年份) plt.ylabel(图书数量) plt.show()清洗后的数据可以轻松生成这样的出版趋势图帮助识别市场热点变化。在实际电商运营中这些洞察能指导采购决策、营销资源分配等关键业务。

更多文章