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 [重复]

错误:pandas hashtable keyerror

使用 Pandas 读取嵌套 JSON 的 KeyError

带有滚动窗口的 Pandas Dataframe 枢轴