Python处理CSV:删除行内非整数内容提取评分用于matplotlib绘图
评分列提取处理方案
你当前读取到的列内容为固定的整数 - 评级文本格式,直接用pandas内置的字符串处理接口就能提取纯数字评分,处理后可直接用于matplotlib可视化。
方法1:固定分隔符拆分(格式完全统一时优先用,效率最高)
所有内容都以-作为数字和评级描述的分隔符,直接拆分取第一段再转整数即可:
import pandas as pd import matplotlib.pyplot as plt # 原有的数据读取代码 likely_recc = pd.read_csv('test_data.csv', usecols = (['How likely are you to recommend this product to a friend?'])) target_col = 'How likely are you to recommend this product to a friend?' # 提取评分:按分隔符拆分 -> 取第一段数字 -> 转为整数类型 likely_recc['score'] = likely_recc[target_col].str.split(' - ').str[0].astype(int)
处理完成后,likely_recc['score']列就是纯整数格式的评分数据,可直接统计绘图,示例:
# 统计各评分的样本量 score_dist = likely_recc['score'].value_counts().sort_index() # 绘制评分分布柱状图 plt.bar(score_dist.index, score_dist.values) plt.xlabel('推荐评分') plt.ylabel('回复数量') plt.title('用户产品推荐意愿分布') plt.show()
方法2:正则提取数字(兼容性更强,适合存在少量格式偏差的场景)
如果担心个别行存在分隔符空格不一致、多余符号的小问题,可以用正则直接匹配字符串开头的连续数字,容错率更高:
# 匹配字符串开头的所有数字字符,自动忽略后续内容 likely_recc['score'] = likely_recc[target_col].str.extract(r'^(\d+)').astype(int)
注意事项
- 两种方法最后都通过
astype(int)把字符串格式的数字转为整数类型,避免matplotlib将评分识别为分类文本,导致坐标轴排序错乱。 - 如果数据集里存在空回复、无效内容,可以在转类型前加
.dropna()过滤空值,避免类型转换报错。
内容的提问来源于stack exchange,提问作者gnenadov
相关产品推荐
相关产品推荐

