我正在计算PG&的股票价格回报。 BEI.DE
为/:'str'和'str'ERROR返回= frame.pct_change()不支持的操作数类型。我的工作是制作字典然后传递字典中的每一列并应用pct_change,mean或media或cov等函数。
在示例中,我遵循教师直接在数据框架上应用函数。为什么我的数据单元被视为字符串而不是数字? 我有一个工作但我不满意吗?
答案 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