python: что не так с моим указателем даты? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть датафрейм, который использует даты в качестве индекса. Хотя я могу прочитать значения индекса из 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)

Почему происходит сбой и как его исправить?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Добавьте эту часть после трех строк: 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
0 голосов
/ 07 ноября 2019

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...