使用Pandas绘制会计数据折线图报错:x must be a label or series
问题分析与解决方案
报错原因
转置后的DataFrame结构不符合你的绘图预期:
- 原DataFrame的
account列转置后变成了行索引,不再是列,因此调用x='account'会触发KeyError - 转置后的列名是原DataFrame的行号(0-6),而非会计科目名称
修正步骤
- 转置后,将第一行(原
account列的内容)设置为新的列名 - 删除已作为列名的第一行数据
- 以月份索引(JAN/FEB)作为x轴,目标会计科目(如REVENUE)作为y轴绘图
修正后的代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 原始数据 data = {'account': ['ASSETS', 'LIABILITIES', 'REVENUE', 'COST OF SALES', 'MARKETING','GENERAL EXPENSES','NETT'], 'JAN': [0, 7014, 39127, 35467, 22487, 3321, 22148.83], 'FEB': [0, 2581.0, 34234, 19321, 14092, 3304, 2483.36], } df = pd.DataFrame(data) # 转置并调整结构 tb = df.T # 将第一行(原account列)设为列名 tb.columns = tb.iloc[0] # 删除已作为列名的第一行 tb = tb.drop('account') # 重置索引为月份列,方便绘图时指定x轴 tb = tb.reset_index().rename(columns={'index': 'month'}) # 绘制折线图:x轴为月份,y轴为REVENUE tb.plot(x='month', y='REVENUE', kind='line') plt.title('REVENUE Trend by Month') plt.show()
为什么GDP代码能正常运行?
GDP的代码未执行转置操作,country和gdp_per_capita都是DataFrame的直接列,指定x='country'和y='gdp_per_capita'完全符合Pandas绘图的参数要求,因此不会报错。
内容的提问来源于stack exchange,提问作者Rger Web
相关产品推荐
相关产品推荐

