Pandas KeyError 使用枢轴
Posted
技术标签:
【中文标题】Pandas KeyError 使用枢轴【英文标题】:Pandas KeyError using pivot 【发布时间】:2016-09-06 02:57:53 【问题描述】:我是 Python 新手,我想使用 Python 来复制一个常见的 Excel 任务。如果已经回答了这样的问题,请告诉我。我一直找不到它。我有以下熊猫数据框(数据):
Date Stage SubStage Value
12/31/2015 1.00 a 0.896882891
1/1/2016 1.00 a 0.0458843
1/2/2016 1.00 a 0.126805588
1/3/2016 1.00 b 0.615824461
1/4/2016 1.00 b 0.245092069
1/5/2016 1.00 c 0.121936318
1/6/2016 1.00 c 0.170198128
1/7/2016 1.00 c 0.735872415
1/8/2016 1.00 c 0.542361912
1/4/2016 2.00 a 0.723769247
1/5/2016 2.00 a 0.305570257
1/6/2016 2.00 b 0.47461605
1/7/2016 2.00 b 0.173702623
1/8/2016 2.00 c 0.969260251
1/9/2016 2.00 c 0.017170798
在 excel 中,我可以使用数据透视表生成以下内容:
在python中做以下事情似乎是合理的:
data.pivot(index='Date',
columns=['Stage', 'SubStage'],
values='Value')
但这会产生:
KeyError: 'Level Stage not found'
什么给了?
【问题讨论】:
您的列标签是否有尾随或前导空格?通过检查data.columns
他们没有:data.columns Index(['Date', 'Stage', 'SubStage', 'Value'], dtype='object')
【参考方案1】:
你想要.pivot_table
,而不是.pivot
。
import pandas
from io import StringIO
x = StringIO("""\
Date Stage SubStage Value
12/31/2015 1.00 a 0.896882891
1/1/2016 1.00 a 0.0458843
1/2/2016 1.00 a 0.126805588
1/3/2016 1.00 b 0.615824461
1/4/2016 1.00 b 0.245092069
1/5/2016 1.00 c 0.121936318
1/6/2016 1.00 c 0.170198128
1/7/2016 1.00 c 0.735872415
1/8/2016 1.00 c 0.542361912
1/4/2016 2.00 a 0.723769247
1/5/2016 2.00 a 0.305570257
1/6/2016 2.00 b 0.47461605
1/7/2016 2.00 b 0.173702623
1/8/2016 2.00 c 0.969260251
1/9/2016 2.00 c 0.017170798
""")
df = pandas.read_table(x, sep='\s+')
xtab = df.pivot_table(index='Date', columns=['Stage','SubStage'], values='Value')
print(xtab.to_string(na_rep='--'))
这给了我:
Stage 1.0 2.0
SubStage a b c a b c
Date
1/1/2016 0.045884 -- -- -- -- --
1/2/2016 0.126806 -- -- -- -- --
1/3/2016 -- 0.615824 -- -- -- --
1/4/2016 -- 0.245092 -- 0.723769 -- --
1/5/2016 -- -- 0.121936 0.305570 -- --
1/6/2016 -- -- 0.170198 -- 0.474616 --
1/7/2016 -- -- 0.735872 -- 0.173703 --
1/8/2016 -- -- 0.542362 -- -- 0.969260
1/9/2016 -- -- -- -- -- 0.017171
12/31/2015 0.896883 -- -- -- -- --
【讨论】:
这很有帮助。一般来说,pivot_table 与 pivot 相比是公认的最佳实践吗?为什么同一个概念有两种功能? 它们有不同的用途,但我无法告诉你它们是什么。我总是用多级索引stack/unstack
来做这样的事情。 @trob
优秀。谢谢!以上是关于Pandas KeyError 使用枢轴的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 访问 csv 文件时出现 KeyError
在 Pandas 中使用 groupby 函数时如何解决“keyerror”?
使用 .loc() 时的 Pandas KeyError [重复]