pandas数据框架中的pct_change方法无法正常工作

3

使用下面的代码我正在尝试检查数字列的百分比变化:

import pandas as pd

df = pd.read_csv('./data.txt')
df.pct_change(1)

data.txt:

,AAPL,MSFT,^GSPC
2000-01-03,3.625643,39.33463,1455.219971
2000-01-04,3.319964,38.0059,1399.420044
2000-01-05,3.3685480000000005,38.406628000000005,1402.109985
2000-01-06,3.077039,37.12008,1403.449951

但是上面的代码返回错误:
/opt/conda/lib/python3.5/site-packages/pandas/core/ops.py in na_op(x, y)
   1187                 if np.prod(xrav.shape) and np.prod(yrav.shape):
   1188                     with np.errstate(all='ignore'):
-> 1189                         result[mask] = op(xrav, yrav)
   1190             elif hasattr(x, 'size'):
   1191                 result = np.empty(x.size, dtype=x.dtype)

TypeError: unsupported operand type(s) for /: 'str' and 'str'

如何使用pct_change方法?移除非数字列(在本例中为日期列),重新运行pct_change,然后重新组合数据列。
1个回答

6

第一列是日期字符串。 当df.pct_change(1)尝试对这些字符串执行除法时,会引发TypeError错误。

避免此错误的一种方法是在解析CSV文件时将日期设置为索引:

import pandas as pd

df = pd.read_csv('./data.txt', index_col=[0])
print(df.pct_change(1))

收益率
                AAPL      MSFT     ^GSPC
2000-01-03       NaN       NaN       NaN
2000-01-04 -0.084310 -0.033780 -0.038345
2000-01-05  0.014634  0.010544  0.001922
2000-01-06 -0.086538 -0.033498  0.000956

你可能还想将日期字符串解析为日期格式:
df = pd.read_csv('./data.txt', index_col=[0], parse_dates=[0])

那么索引将是 DatetimeIndex 而不是普通的字符串类型 Index。 这样可以在索引上进行日期时间算术运算,并且可以基于时间插值数值。点击此处查看更多信息。


你知道我在积极地试图在pandas列表上抓住你... 如果你继续提供我不得不点赞的答案,那我该怎么做呢? - piRSquared
哎呀,我看到你迅速上升。我的排行榜日子看起来不多了 :) - unutbu
@unutbu 所以索引列被忽略了,pct_change方法因此没有抛出错误? - blue-sky
DataFrame.pct_change 计算 DataFrame 所有 的百分比变化。索引保持不变。 - unutbu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接