2017-02-11 52 views
0

我试图枢转下表在[pd.concat的结果(X)],与这行代码:Python的熊猫 - 混合值类型错误枢转表

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:没有数字类型进行聚合。有任何想法吗?谢谢!

回答

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 

或者min,或max等需要注意的是,如果你混合非数值和数值列,你value列将会是dtype=object,所以你要想要重新计算(?)结果列以确保它们适当地被分类。

1

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

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