如何正确绘制不同列含字符串和数值的分组pandas序列并解决报错
报错原因与修复方案
报错原因
你调用data.groupby(ct, to_numeric)时参数传递错误:groupby的第二个位置参数是axis,你传入了to_numeric这个可变的DataFrame对象,DataFrame无法被哈希,因此触发该报错。
实现需求的两种方案
你需要实现按col2(对应数据中的riskiaobis done列)分组,统计col1(对应数据中的datvla列)各取值的数量,以下是两种可直接运行的实现:
方案1:双列分组统计(无需独热编码,更简洁)
import matplotlib.pyplot as plt import pandas as pd # 读取数据 data = pd.read_csv(r"C:\Users\givi.jalaghania\.spyder-py3\07_maragebi.csv") # 分组统计:按col2和col1分组,计算样本量,重排索引方便绘图 stat_res = data.groupby(['riskiaobis done', 'datvla']).size().unstack(fill_value=0) # 绘制柱状图 stat_res.plot(kind='bar', figsize=(10,6)) plt.xlabel('分类特征(col2)') plt.ylabel('样本数量') plt.title('各分类下col1取值分布') plt.show() # 按需查询特定分类下col1=1、2的总样本数,例如查询maRali特征 print(stat_res.loc['maRali', [1,2]].sum())
方案2:适配独热编码思路的实现
如果你需要保留独热编码的处理逻辑,需先将独热编码结果合并到原数据集后再分组:
import matplotlib.pyplot as plt import pandas as pd # 读取数据 data = pd.read_csv(r"C:\Users\givi.jalaghania\.spyder-py3\07_maragebi.csv") # 生成独热编码并合并到原数据集 dummies = pd.get_dummies(data['riskiaobis done'], prefix='col2') data = pd.concat([data, dummies], axis=1) # 按col1分组,统计各分类特征的样本量 stat_res = data.groupby('datvla')[dummies.columns].sum() # 绘制柱状图 stat_res.plot(kind='bar', figsize=(10,6)) plt.xlabel('col1取值') plt.ylabel('样本数量') plt.title('各col1取值下分类特征分布') plt.show()
内容的提问来源于stack exchange,提问作者jalaghania
相关产品推荐
相关产品推荐

