【问题标题】:Pandas Pivot causes all values to be NaNPandas Pivot 导致所有值均为 NaN
【发布时间】:2018-03-16 14:29:52
【问题描述】:

我有一个由 12 列和 900 个条目组成的 pandas 数据框,如下所示:

In [1]: df

Out[2]: 

    Id  BestInGen   Ceiling Fitness Floor   Generation  Name    Precision   Runid   SolutionId  Timestamp                Value
0   1   True    2.5 2.416582e+11    0.500   1   H1001Thickness1 0.010   20180214142319  4   2018-02-14 14:28:41.391908  0.500
1   2   False   0.1 2.830500e+11    0.015   1   H6512Diameter8  0.005   20180214142319  3   2018-02-14 14:28:41.423109  0.015
2   3   False   2.5 2.830500e+11    0.500   1   H2201Thickness1 0.010   20180214142319  3   2018-02-14 14:28:41.423109  0.500
3   4   False   0.1 2.830500e+11    0.015   1   H2201Diameter1  0.005   20180214142319  3   2018-02-14 14:28:41.423109  0.015
4   5   False   2.5 2.830500e+11    0.500   1   H2201Thickness2 0.010   20180214142319  3   2018-02-14 14:28:41.423109  0.500

我想旋转这个数据框,使“名称”变成列,而行由“值”填充。

目前我尝试了以下方法:

dfPivot = df.pivot(index='Id',columns='Name',values='Value)

我认为这会产生我需要的结果,我看到的其他线程也是如此。但就我而言,会发生以下情况

In [3]: dfPivot

Out [4]: 


Name    H1001Diameter1  H1001Diameter10 H1001Diameter12
Id
1       Nan             Nan             Nan

同样的情况一直持续到数据帧的末尾,所有值都是 Nan。原始数据类型为float64,原始数据中没有Nans。

关于如何解决这个问题的任何指示?对不起,如果这是一个菜鸟问题,或者如果您需要我编辑我的问题/示例,请告诉我。

【问题讨论】:

  • 尝试打印更多行。它们并不都是 NaN,只是在没有对应值的地方。根据您发布的内容,我在选定的单元格中获得了数值。
  • 当我打印出更多内容时,它们都显示为 NaN。如果我尝试.dropna(),所有行都会被删除。
  • 再一次,根据您在此处发布的内容,运行精确的 pivot 代码(修复最后缺少的单引号),有一些非 NA 值。小心.dropna。根据docs,如果存在 any NA,它就会下降。传入how='all' 并且没有为我删除任何列。

标签: python pandas dataframe


【解决方案1】:

试试

pd.pivot_table(df[['Id', 'Name', 'Value']],
               index='Id',
               columns=['Name'],
               values=['Value'],
               aggfunc=lambda x: x)

这假设您不重复值。否则,您需要编辑aggfunc 以进行正确的聚合

【讨论】:

  • 感谢您的回复。当我尝试你提到的一切时,一切仍然显示为 NaN。您提到了聚合,但我想避免这种情况,因为我需要将这些值用作其他内容的输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2016-12-17
  • 2015-07-09
  • 2015-02-08
  • 2021-03-08
  • 2022-07-06
相关资源
最近更新 更多