2017-04-18 201 views
2

這裏是python和pandas的新手段。用熊貓重新採樣python列表

我做了一個查詢,讓我回來一個時間序列。我無法確定從查詢中獲得的數據點(運行一天),但我知道的是,我需要重新採樣它們以包含24點(每天一個小時)。

印刷m3hstream給

[(1479218009000L, 109), (1479287368000L, 84)] 

然後我試圖讓與

df = pd.DataFrame(data = list(m3hstream), columns=['Timestamp', 'Value']) 

一個數據幀DF,這給我的

  Timestamp Value 
     0 1479218009000 109 
     1 1479287368000  84 

輸出繼我這樣做

daily_summary = pd.DataFrame() 
daily_summary['value'] = df['Value'].resample('H').mean() 
daily_summary = daily_summary.truncate(before=start, after=end) 
print "Now daily summary" 
print daily_summary 

但是,這是給我一個類型錯誤:只有DatetimeIndex,TimedeltaIndex或PeriodIndex有效的,但得到的實例「RangeIndex」

任何人都可以請讓我知道如何重新取樣,所以我必須每1點我在查詢的24小時內是否有小時?

謝謝。

回答

2
  • 你需要做的第一件事是轉換是'Timestamp'到一個實際的pd.Timestamp。它看起來像那些milliseconds
  • 然後resampleon參數設置爲'Timestamp'

df = df.assign(
    Timestamp=pd.to_datetime(df.Timestamp, unit='ms') 
).resample('H', on='Timestamp').mean().reset_index() 

      Timestamp Value 
0 2016-11-15 13:00:00 109.0 
1 2016-11-15 14:00:00 NaN 
2 2016-11-15 15:00:00 NaN 
3 2016-11-15 16:00:00 NaN 
4 2016-11-15 17:00:00 NaN 
5 2016-11-15 18:00:00 NaN 
6 2016-11-15 19:00:00 NaN 
7 2016-11-15 20:00:00 NaN 
8 2016-11-15 21:00:00 NaN 
9 2016-11-15 22:00:00 NaN 
10 2016-11-15 23:00:00 NaN 
11 2016-11-16 00:00:00 NaN 
12 2016-11-16 01:00:00 NaN 
13 2016-11-16 02:00:00 NaN 
14 2016-11-16 03:00:00 NaN 
15 2016-11-16 04:00:00 NaN 
16 2016-11-16 05:00:00 NaN 
17 2016-11-16 06:00:00 NaN 
18 2016-11-16 07:00:00 NaN 
19 2016-11-16 08:00:00 NaN 
20 2016-11-16 09:00:00 84.0 

如果你想填補這些NaN值,使用ffillbfill,或interpolate

df.assign(
    Timestamp=pd.to_datetime(df.Timestamp, unit='ms') 
).resample('H', on='Timestamp').mean().reset_index().interpolate() 

      Timestamp Value 
0 2016-11-15 13:00:00 109.00 
1 2016-11-15 14:00:00 107.75 
2 2016-11-15 15:00:00 106.50 
3 2016-11-15 16:00:00 105.25 
4 2016-11-15 17:00:00 104.00 
5 2016-11-15 18:00:00 102.75 
6 2016-11-15 19:00:00 101.50 
7 2016-11-15 20:00:00 100.25 
8 2016-11-15 21:00:00 99.00 
9 2016-11-15 22:00:00 97.75 
10 2016-11-15 23:00:00 96.50 
11 2016-11-16 00:00:00 95.25 
12 2016-11-16 01:00:00 94.00 
13 2016-11-16 02:00:00 92.75 
14 2016-11-16 03:00:00 91.50 
15 2016-11-16 04:00:00 90.25 
16 2016-11-16 05:00:00 89.00 
17 2016-11-16 06:00:00 87.75 
18 2016-11-16 07:00:00 86.50 
19 2016-11-16 08:00:00 85.25 
20 2016-11-16 09:00:00 84.00 
+0

我跑你的代碼,它的給了我在問題中發佈的相同輸出。我可能會做其他事嗎? – Ehrendil

+0

如果您沒有完全按照我所發佈的內容進行操作,那麼出現了一些問題。你在哪裏運行?在iPython/Jupyter筆記本中? IPython的?安慰? – piRSquared

+0

控制檯。我正在使用PyCharm IDE,並在控制檯中打印輸出。 – Ehrendil

2

讓我們嘗試:

daily_summary = daily_summary.set_index('Timestamp') 

daily_summary.index = pd.to_datetime(daily_summary.index, unit='ms') 

爲每小時一次:

daily_summary.resample('H').mean() 

或每天一次:

daily_summary.resample('D').mean() 
+0

這是輸出: 價值 時間戳 1970-01-01 00:24:39.218009 109 1970-01-01 00:24:39.287368 84 – Ehrendil

+0

@ little.toblerone增加了單位= 'MS' 到to_datetime –