熊貓菜鳥在這裏。熊貓數據框重新取樣的ms值
我有以下格式的文件:
SET, 0, 0, 0, 6938987, 0, 4
SET, 1, 1, 6938997, 128, 0, 0
SET, 2, 4, 6938998, 145, 0, 2
SET, 0, 9, 6938998, 147, 0, 0
SET, 1, 11, 6938998, 149, 0, 0
....
SET, 1, 30, 6946103, 6, 0, 0
SET, 2, 30, 6946104, 6, 0, 2
GET, 0, 30, 6946104, 8, 0, 0
SET, 1, 30, 6946105, 8, 0, 0
GET, 2, 30, 6946106, 7, 0, 0
第5列表示,我從一個系統測量毫秒(從Java的System.nanoTime轉換())。因此這些不代表任何日期/時間格式。我想要以5s爲間隔進行聚合,例如從第一個6938987到6943987進行聚合:獲取SET/GET的值計數,獲取平均值,標準偏差等。
data = pd.read_csv('data2.log', sep=", ", header=None)
data.columns = ["command", "server", "lenQueue", "inQueue", "diffQueue", "diffParse", "diffProcess"]
r = data.resample("5ms", on='inQueue')
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'
任何方式做重採樣與價值的差異,而不是一個時間序列:
我以不同的方式使用data.resample而是繼續得到 以下錯誤試過嗎? -
編輯由強尼建議的解決方案:
在timedelta轉化毫秒,然後重新採樣,以5ms的:
data['td'] = pd.to_timedelta(data['inQueue'], 'ms')
data['sum'] = data.set_index(data['td'])['lenQueue'].resample('5ms').sum()
[Other columns ommitted]
td sum
0 00:00:00 NaN
1 01:55:38.997000 NaN
2 01:55:38.998000 NaN
3 01:55:38.998000 NaN
4 01:55:38.998000 NaN
5 01:55:38.998000 NaN
6 01:55:38.999000 NaN
難道是因爲有其他列是必須也有一些聚合完成他們?如果是這樣,我該怎麼做多次?
這很有道理,謝謝!我試圖讓它與我的數據集一起工作,但只獲得NaN作爲聚合結果。我已經更新了我原來的帖子,如果你可以請看看,並有任何建議 – dtam
@dtam可能只是頻率?嘗試一個更大的值,比如'5s'?南方人只是說在給定的時間間隔內沒有值。 – JohnE
我試過更大的時間間隔,但有同樣的問題。我回到你的例子,並嘗試下面的行,有一個新的'總和'列的結果: df ['sum'] = df.set_index(df ['td'])['lenQueue']。resample ('5ms')。sum() 這也給我所有的NaNs。 – dtam