从Stockdata创建pd.Series

时间:2019-07-18 07:20:45

标签: pandas series stock

我正在尝试使用具有日期列和三列股票价值的数据创建pd.Series。我得到的只是一个以日期和'NaN'为值的系列?

数据看起来像这样

        Datum       Eroeffnung  Tief        Hoch        Schluss
0       31.12.69    100.0000    100.0000    100.0000    100.0000
1       30.01.70    94.2489     94.2489     94.2489     94.2489
2       27.02.70    96.9790     96.9790     96.9790     96.9790
...
6478    11.07.19    2205.346    2205.346    2205.346    2205.346
6479    12.07.19    2212.645    2212.645    2212.645    2212.645
6480    15.07.19    2214.340    2214.340    2214.340    2214.340
6481    16.07.19    2208.088    2208.088    2208.088    2208.088
6482    17.07.19    2197.936    2197.936    2197.936    2197.936

当我执行以下操作时:

data = pd.read_csv('msci_world_kurse_vers6.csv')

d = data['Datum'].astype('datetime64')
idx = pd.DatetimeIndex(data['Datum'])
s = data['Schluss'].astype(float)
s1 = pd.Series(data['Schluss'] index=data['Datum'])
s2 = pd.Series(s, index=idx)
s3 = pd.Series(s, index=d)

我得到s1,s2,s3:

Datum
1969-12-31   NaN
1970-01-30   NaN
1970-02-27   NaN
1970-03-31   NaN
1970-04-30   NaN
1970-05-29   NaN
1970-06-30   NaN
1970-07-31   NaN
1970-08-31   NaN
1970-09-30   NaN
1970-10-30   NaN
1970-11-30   NaN

类似

plt.plot(data['Datum'], data['Schluss'])

运作良好。

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要DatetimeIndex,因此可以在read_csv中使用参数index_colparse_dates

data = pd.read_csv('msci_world_kurse_vers6.csv', index_col=['Datum'], parse_dates=['Datum'])

在代码中,由于数据对齐,导致缺少值,这意味着索引系列尝试与新索引匹配,如果索引不同,则得到丢失值。

解决方案是将值转换为numpy数组,以避免出现这种情况:

#pandas 0.24+
s1 = pd.Series(data['Schluss'].to_numpy(), index=data['Datum'])
s2 = pd.Series(s.to_numpy(), index=idx)
s3 = pd.Series(s.to_numpy(), index=d)

s1 = pd.Series(data['Schluss'].values, index=data['Datum'])
s2 = pd.Series(s.values, index=idx)
s3 = pd.Series(s.values, index=d)