仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但有一个“Int64Index”实例

Dim*_*imi 10 datetime resampling dataframe python-3.x pandas

我正在尝试重新采样此 Dataframe 的Timestamp列:

  Transit.head():

      Timestamp                            Plate           Gate
  0 2013-11-01 21:02:17 4f5716dcd615f21f658229a8570483a8    65
  1 2013-11-01 16:12:39 0abba297ac142f63c604b3989d0ce980    64
  2 2013-11-01 11:06:10 faafae756ce1df66f34f80479d69411d    57
Run Code Online (Sandbox Code Playgroud)

这就是我所做的:

  Transit.drop_duplicates(inplace=True)
  Transit.Timestamp = pd.to_datetime(Transit.Timestamp)
  Transit['Timestamp'].resample('1H').pad()
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

  Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

jez*_*ael 16

Create DatetimeIndexby DataFrame.set_index- 上采样和下采样的解决方案:

df = Transit.set_index('Timestamp').resample('1H').pad()
print (df)
                                                Plate  Gate
Timestamp                                                  
2013-11-01 11:00:00                               NaN   NaN
2013-11-01 12:00:00  faafae756ce1df66f34f80479d69411d  57.0
2013-11-01 13:00:00  faafae756ce1df66f34f80479d69411d  57.0
2013-11-01 14:00:00  faafae756ce1df66f34f80479d69411d  57.0
2013-11-01 15:00:00  faafae756ce1df66f34f80479d69411d  57.0
2013-11-01 16:00:00  faafae756ce1df66f34f80479d69411d  57.0
2013-11-01 17:00:00  0abba297ac142f63c604b3989d0ce980  64.0
2013-11-01 18:00:00  0abba297ac142f63c604b3989d0ce980  64.0
2013-11-01 19:00:00  0abba297ac142f63c604b3989d0ce980  64.0
2013-11-01 20:00:00  0abba297ac142f63c604b3989d0ce980  64.0
2013-11-01 21:00:00  0abba297ac142f63c604b3989d0ce980  64.0
Run Code Online (Sandbox Code Playgroud)

对于下采样可以使用参数on

df = Transit.resample('D', on='Timestamp').mean()
print (df)
            Gate
Timestamp       
2013-11-01    62
Run Code Online (Sandbox Code Playgroud)

编辑:对于删除与复制的所有行Timestamp加参数subsetDataFrame.drop_duplicates

Transit.drop_duplicates(subset=['Timestamp'], inplace=True)
Transit.Timestamp = pd.to_datetime(Transit.Timestamp)
df = Transit.set_index('Timestamp').resample('1H').pad()
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过了,这就是我得到的:无法使用方法或限制重新索引非唯一索引 (2认同)
  • 当我在我的例子中运行 `Transit.set_index('Timestamp').resample('D').sum()` 时,输出如下: `2013-11-01T11:00:00.000000000` 并且不再有列“时间戳”! (2认同)