pct_change()没有处理数据帧。 str&严重错误

时间:2018-02-03 23:29:40

标签: python pandas

我正在计算PG&的股票价格回报。 BEI.DE

为/:'str'和'str'ERROR返回= frame.pct_change()不支持的操作数类型。我的工作是制作字典然后传递字典中的每一列并应用pct_change,mean或media或cov等函数。

在示例中,我遵循教师直接在数据框架上应用函数。为什么我的数据单元被视为字符串而不是数字? 我有一个工作但我不满意吗?

1 个答案:

答案 0 :(得分:0)

假设您正在使用pandas DataFrame,那么我首先在​​DataFrame上调用info

In [1]: type(frame)
Out[1]: pandas.core.frame.DataFrame

In [2]: frame.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 2 columns):
Close    5 non-null object
Date     5 non-null object
dtypes: object(2)
memory usage: 160.0+ bytes

这里我们有一个DataFrame,但收盘价不是数值。因此,我们可以通过强制关闭&#39;关闭&#39;来直接将pct_change计算到DataFrame的新列中。列到浮点数,如下所示:

In [3]: frame['% change'] = frame['Close'].astype(float).pct_change()

In [4]: frame
Out[4]: 
    Close        Date  % change
0  167.96  2018-01-29       NaN
1  166.97  2018-01-30 -0.005894
2  167.43  2018-01-31  0.002755
3  167.78  2018-02-01  0.002090
4  160.37  2018-02-02 -0.044165

但是你可能想把你的DataFrame纠缠成正确的类型......所以你可以做以下事情:

In [5]: frame['Close'] = frame['Close'].astype(float)
In [6]: frame['Date'] = pd.to_datetime(frame['Date'])
In [7]: frame.set_index('Date', inplace=True)
In [8]: frame.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 5 entries, 2018-01-29 to 2018-02-02
Data columns (total 2 columns):
Close       5 non-null float64
% change    4 non-null float64
dtypes: float64(2)
memory usage: 120.0 bytes