Python Pandas - 使用混合值类型错误地旋转表

时间:2017-02-11 23:57:20

标签: python

我试图使用以下代码行转向下表[pd.concat(x)]的结果:

df = pd.concat(x).pivot_table(index=["SECURITY", "DATE"], columns="variable", values="value")

          DATE     SECURITY        value           variable
0   2017-02-01  EDH8 COMDTY       98.365            PX_LAST
1   2017-02-02  EDH8 COMDTY        98.37            PX_LAST
2   2017-02-03  EDH8 COMDTY        98.36            PX_LAST
3   2017-02-06  EDH8 COMDTY       98.405            PX_LAST
4   2017-02-07  EDH8 COMDTY        98.41            PX_LAST
5   2017-02-08  EDH8 COMDTY       98.435            PX_LAST
6   2017-02-09  EDH8 COMDTY       98.395            PX_LAST
0   2017-02-01  EDH8 COMDTY  1.00804e+06           OPEN_INT
1   2017-02-02  EDH8 COMDTY  1.00999e+06           OPEN_INT
2   2017-02-03  EDH8 COMDTY  1.01918e+06           OPEN_INT
3   2017-02-06  EDH8 COMDTY  1.02386e+06           OPEN_INT
4   2017-02-07  EDH8 COMDTY  1.02461e+06           OPEN_INT
5   2017-02-08  EDH8 COMDTY  1.04626e+06           OPEN_INT
6   2017-02-09  EDH8 COMDTY  1.05029e+06           OPEN_INT
0   2017-02-01  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
1   2017-02-02  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
2   2017-02-03  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
3   2017-02-06  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
4   2017-02-07  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
5   2017-02-08  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT
6   2017-02-09  EDH8 COMDTY   2018-03-19  LAST_TRADEABLE_DT

这会导致以下错误:DataError:无需聚合的数字类型。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可能想要检查value列的数据类型是否为数字类型,否则(例如字符串/日期)可能会导致默认聚合函数出现问题。在这种情况下,您可能需要显式使用另一个aggfunc,例如将它们存储到数组中。

根据official documentvalues : column to aggregate, optionalaggfunc : function or list of functions, default numpy.mean

答案 1 :(得分:1)

你可以选择一个不同的,几乎任意的aggfunc;你只需要一个元素来操作。例如,sum

In [37]: df.pivot_table(index=["SECURITY", "DATE"], 
                        columns="variable", values="value", 
                        aggfunc=sum)
Out[37]: 
variable               LAST_TRADEABLE_DT     OPEN_INT PX_LAST
SECURITY    DATE                                             
EDH8 COMDTY 2017-02-01        2018-03-19  1.00804e+06  98.365
            2017-02-02        2018-03-19  1.00999e+06   98.37
            2017-02-03        2018-03-19  1.01918e+06   98.36
            2017-02-06        2018-03-19  1.02386e+06  98.405
            2017-02-07        2018-03-19  1.02461e+06   98.41
            2017-02-08        2018-03-19  1.04626e+06  98.435
            2017-02-09        2018-03-19  1.05029e+06  98.395

minmax等。请注意,如果您要混合非数字和数字列,则value列将为dtype=object ,所以你想要重新数字化(?)结果列,以确保它们被恰当地分类。