获取第一个pandas DataFrame的专栏?

时间:2013-12-06 20:31:14

标签: python pandas

我想计算我的第一个std DataFrame列的prices

这是我的代码:

import pandas as pd

def std(returns):
    return pd.DataFrame(returns.std(axis=0, ddof=0))

prices = pd.DataFrame([[-0.33333333, -0.25343423, -0.1666666667],
                       [+0.23432323, +0.14285714, -0.0769230769],
                       [+0.42857143, +0.07692308, +0.1818181818]])

print(std(prices.ix[:,0]))

当我运行它时,我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\*****\Documents\******\******\****.py", line 12, in <module>
    print(std(prices.ix[:,0]))
  File "C:\Users\*****\Documents\******\******\****.py", line 10, in std
    return pd.DataFrame(returns.std(axis=0, ddof=0))
  File "C:\Python33\lib\site-packages\pandas\core\frame.py", line 453, in __init__
    raise PandasError('DataFrame constructor not properly called!')
pandas.core.common.PandasError: DataFrame constructor not properly called!

我该如何解决?

谢谢!

2 个答案:

答案 0 :(得分:4)

仔细查看代码中的内容:

>>> prices.ix[:,0]
0   -0.333333
1    0.234323
2    0.428571

>>> prices.ix[:,0].std(axis=0, ddof=0)
0.32325861621668445

所以你正在调用DataFrame构造函数:

pd.DataFrame(0.32325861621668445)

构造函数不知道如何处理单个float参数。它需要某种顺序或可迭代。也许你是这样的:

>>> pd.DataFrame([0.32325861621668445])
          0
0  0.323259

答案 1 :(得分:0)

应该这么简单:

In [0]: prices[0].std()

Out[0]: 0.39590933234452624

DataFrames的列为Series。您可以直接在其上调用Series方法。