У меня проблемы с пониманием того, что происходит с меткой времени после переиндексации фрейма данных с использованием pd.date_range
. Если у меня есть следующий пример, где я использую pd.DataFrame.reindex
для создания более длинных временных рядов:
import pandas as pd
import numpy as np
idx_inital = pd.date_range('2004-03-01','2004-05-05')
df = pd.DataFrame(index = idx_inital, data={'data': np.random.randint(0,100,idx_inital.size)})
idx_new = pd.date_range('2004-01-01','2004-05-05')
df= df.reindex(idx_new, fill_value = 0)
, который возвращает ожидаемый результат, когда все данные назначены 0
:
data
2004-01-01 0
2004-01-02 0
2004-01-03 0
2004-01-04 0
2004-01-05 0
Теперь, если я хочу использовать применить, чтобы назначить новый столбец, используя:
def year_attrib(row):
if row.index.month >2:
result = row.index.year + 11
else:
result = row.index.year + 15
return result
df['year_attrib'] = df.apply(lambda x: year_attrib(x), axis=1)
Я получаю сообщение об ошибке:
AttributeError: ("'Index' object has no attribute 'month'", 'occurred at index 2004-01-01 00:00:00')
Если я проверю, что каждая строка передается в year_attrib
с помощью:
row = df.iloc[0]
row
Out[32]:
data 0
Name: 2004-01-01 00:00:00, dtype: int32
Похоже, метка времени передается в Name
, и я не знаю, как получить к ней доступ. Когда я смотрю на row.index
, я получаю:
row.index
Out[34]: Index(['data'], dtype='object')
В чем причина такого поведения?