【问题标题】:Pandas pivot_table incorrectly showing NaN valuesPandas pivot_table 错误地显示 NaN 值
【发布时间】:2019-02-20 18:34:43
【问题描述】:

以下是我的数据的原始结构(pre-pivot):

    product    reviewer    rating
0       foo       userA        81
1       bar       userB        96
2       foo       userB        75
3       xyz       userA        42

然后我正在跑步:

df = pd.pivot_table(df, index="product", columns="reviewer", values="rating")

这会产生一个新的数据框,布局正确,但神秘地显示出比属于更多的 NaN:

       userA    userB
foo      NaN       75
bar      NaN       96
xyz      NaN      NaN

有趣的是,如果我查看 df['userA']

product
      NaN
foo    81
bar    96
xyz   NaN

...其中包含正确的数据(虽然我不太确定顶部的空白行是怎么回事,但这不是我关心的问题)。


知道是什么原因导致在显示(或写入 csv)完整表时出现额外的 NaN,即使在查看单个列时所有值都正确显示?

我已经尝试了here 的解决方案

df.set_index(['product', 'reviewer', 'rating']).unstack('reviewer')

但结果是一样的(除了现在用“None”代替“NaN”)。

【问题讨论】:

  • 很抱歉,我的数据中都是“id”,但我将其更改为 product 以使其对这篇文章更直观,只是漏掉了几次。编辑原始帖子以保持一致性。
  • 您的 edited 问题可能不再是问题,因为您的 edited 命令用于从您的编辑原始数据现在可以正常工作
  • 我所做的只是编辑它以准确反映导致错误的代码中发生的情况。我没有做任何与我写这篇文章之前不同的事情。在某些应该有评级值的情况下,数据框后枢轴显示 NaN。

标签: python pandas pivot pivot-table data-analysis


【解决方案1】:

根据您的数据,您可以:

df_new=pd.pivot_table(df, index="product", columns="reviewer", values="rating").rename_axis(None,1)
print(df_new)

         userA  userB
product              
bar        NaN   96.0
foo       81.0   75.0
xyz       42.0    NaN

你提到的空白id可以通过调用rename_axis(None,1)删除

【讨论】:

  • 我其实并没有那么在意那个空白索引,这只是我一路上注意到的。
猜你喜欢
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多