我正在尝试使用具有日期列和三列股票价值的数据创建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'])
运作良好。
知道我在做什么错吗?
答案 0 :(得分:0)
我认为您需要DatetimeIndex
,因此可以在read_csv
中使用参数index_col
和parse_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)