我有一个使用日期作为索引的数据框。尽管我可以从series.index中读取索引值,但是我无法获得相应的记录。
series = pd.DataFrame([[datetime.date(2019,1,1), 'A', 4], [datetime.date(2019,1,2), 'B', 6]], columns = ('Date', 'Index', 'Value'))
series2 = series.pivot(index='Date', columns='Index', values='Value')
index = series2.index[0]
到目前为止,一切正常。 但是这一行代码失败了:
row = series[index]
错误消息是
KeyError: datetime.date(2019, 1, 1)
为什么会失败,我该如何解决?
答案 0 :(得分:0)
使用Series.loc
进行选择,但在series2
中使用,因为在series
中是RangeIndex
,而不是日期:
row = series2.loc[index]
print (row)
Index
A 4.0
B NaN
Name: 2019-01-01, dtype: float64
详细信息:
print (series)
Date Index Value
0 2019-01-01 A 4
1 2019-01-02 B 6
print (series.index)
RangeIndex(start=0, stop=2, step=1)
print (series2)
Index A B
Date
2019-01-01 4.0 NaN
2019-01-02 NaN 6.0
答案 1 :(得分:0)
在您的三行之后添加此部分:
series.set_index('Date', inplace=True)
所以,整个事情是:
import pandas as pd
import datetime
series = pd.DataFrame([[datetime.date(2019,1,1), 'A', 4],
[datetime.date(2019,1,2), 'B', 6]],
columns = ('Date', 'Index', 'Value'))
series2 = series.pivot(index='Date', columns='Index',
values='Value')
index = series2.index[0]
series.set_index('Date', inplace=True) # this part was added
series.loc[index]
Out[57]:
Index A
Value 4
Name: 2019-01-01, dtype: object