Resampling Pandas: TypeError: Действителен только с DatetimeIndex, TimedeltaIndex или PeriodIndex, но получил экземпляр RangeIndex

1

Пожалуйста, помогите мне. Я хочу перепрограммировать на основе 1D. У меня есть следующий формат данных. Я хочу использовать повторную выборку в пандах.

Я хочу перепрограммировать на основе даты и продукта, а также заполнить недостающие значения.

Но я продолжаю получать эту ошибку: я пробовал как 5 вариантов и ошибки только после "экземпляра": я видел там Multiindex, Index.

TypeError: действует только с DatetimeIndex, TimedeltaIndex или PeriodIndex, но получил экземпляр "RangeIndex"

product value   date
A   1.52    2016-01-01
A   NULL    2016-09-20
A   1.33    2018-08-02
B   1.30    2016-01-01
B   NULL    2017-01-02
B   1.54    2017-03-10
B   2.08    2017-06-28
B   2.33    2018-08-02

Я ввел эти данные в

df.reset_index().set_index('date','sku')  
df= df.groupby('product').resample('1D')['value'].ffill().bfill().ffill()

Я также попробовал:

df = df.set_index(['date','sku'])
df = df.set_index('date','sku')
df = df.reset_index().set_index(['date','sku'])  

Пожалуйста, не могли бы вы объяснить мне, что я делаю неправильно? Спасибо!

Сегодня утром он работал над этими данными и командой из Израиля:

df = df.set_index('date').groupby('product').resample('1D')['value'].ffill()

    product value   date
   0    A   1.52    2016-01-01
   1    A   NaN 2016-09-20 
   2    A   1.87    2018-08-02
   3    B   2.33    2016-01-01
   4    B   NaN 2016-09-20
   5    B   4.55    2018-08-02

Но внезапно это больше не происходит. Теперь у меня есть индекс в выражении ошибки.

Теги:
pandas

1 ответ

1

Вам нужно DatetimeIndex если вы работаете с DataFrameGroupBy.resample, также bfill опускается, потому что, если возможны только некоторые группы NaN эти данные заменяются из других групп:

#if necessary convert to datetimes 
#df['date'] = pd.to_datetime(df['date'])

df = df.set_index('date').groupby('product').resample('1D')['value'].ffill()
print (df)
product  date      
A        2016-01-01    1.52
         2016-01-02    1.52
         2016-01-03    1.52
         2016-01-04    1.52
         2016-01-05    1.52
         2016-01-06    1.52
         2016-01-07    1.52
         2016-01-08    1.52
         2016-01-09    1.52
         2016-01-10    1.52
         2016-01-11    1.52
         2016-01-12    1.52

Измененный образец для лучшего объяснения:

print (df)
  product  value       date
0       A   1.52 2016-01-01
1       A    NaN 2016-01-03
2       B    NaN 2017-01-02
3       B    NaN 2017-01-03
4       C   1.54 2017-03-10
5       C   2.08 2017-03-12
6       C   2.33 2017-03-14

df1 = df.set_index('date').groupby('product').resample('1D')['value'].ffill()
print (df1)
product  date      
A        2016-01-01    1.52
         2016-01-02    1.52
         2016-01-03     NaN < NaN is not changed because in original data
B        2017-01-02     NaN <- only NaN group B
         2017-01-03     NaN
C        2017-03-10    1.54
         2017-03-11    1.54
         2017-03-12    2.08
         2017-03-13    2.08
         2017-03-14    2.33
Name: value, dtype: float64

df11 = df.set_index('date').groupby('product').resample('1D')['value'].ffill().bfill()
print (df11)
product  date      
A        2016-01-01    1.52
         2016-01-02    1.52
         2016-01-03    1.54 <- back filling value from group C
B        2017-01-02    1.54 <- back filling value from group C
         2017-01-03    1.54 <- back filling value from group C
C        2017-03-10    1.54
         2017-03-11    1.54
         2017-03-12    2.08
         2017-03-13    2.08
         2017-03-14    2.33
Name: value, dtype: float64
  • 1
    Привет, Джезраэль, это так здорово! Спасибо за отличное объяснение. Я не знаю, как это могло работать раньше ... Просто чтобы уточнить, мне нужно установить индекс только по времени, а затем сгруппировать по значению, которое я хочу изменить, верно? Большое спасибо!
  • 0
    Но - ты думаешь, возможно, мой Юпитер против меня? Как только это работает, когда это не так, хотя у меня есть тот же набор данных?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню