簡體   English   中英

pandas dataframe 日期時間索引的重采樣錯誤

[英]Resampling error with pandas dataframe datetime index

我正在運行一個txt。 通過 python 文件並嘗試將數據重新采樣為每日平均值。 文本。 文件包含實際數據集之前的文本,所以我讀取了文件然后刪除了第一行。 整個數據集有大約 300 萬行。

示例數據如下所示:

**There are 20 lines of text before the data           

     Date      Time             Time           Pressure     Temperature
   M/d/yyyy  HH:mm:ss            hr              psi            degF
  
  10/23/2019  16:39:25        0.000000         13.3120        106.0533
  10/23/2019  16:39:26        0.001389         13.2860        106.0155
  10/23/2019  16:39:27        0.002778         13.2952        105.9848
  10/23/2019  16:39:28        0.004167         13.2788        105.9535
  10/23/2019  16:39:29        0.005556         13.2704        105.9228
  10/23/2019  16:39:30        0.006944         13.2946        105.8922
  10/23/2019  16:39:31        0.008333         13.2684        105.8620

我的代碼如下所示:

import pandas as pd

df = pd.read_csv('well_pressures.txt', header=None)
df.drop(df.head(20).index, inplace=True)
df.columns=['test']
df = df.test.str.split(expand=True)
df.rename(columns ={0:'Date', 1:'Time', 2:'Time2', 3:'Pressure', 4:'Temperature'},inplace=True)
df.drop(columns={'Time','Time2'}, inplace=True)

wellname = 'well 4' 
df['Wellbore'] = wellname 

df.set_index('Wellbore', inplace=True)
df['Date'] = pd.to_datetime(df['Date'])
df = df.resample('D').mean()

當我運行代碼時,我收到錯誤“TypeError:僅對 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但有一個 'Index' 實例”。 我不確定如何解決這個問題,即使在重置索引之后也是如此。 當我將日期列設置為索引並嘗試重新采樣時,我得到一個關鍵錯誤。 我可以讓它工作的唯一方法是,如果我在讀取文件時索引日期列,並在導入文件之前刪除不必要的前幾行(但我寧願不必這樣做)。

預期 output:

 Wellbore        Date       Pressure     Temperature
  Well 4      10/23/2019      13.34        106.1
  Well 4      10/24/2019      13.20        106.2
  Well 4      10/25/2019      13.36        105.9
  Well 4      10/26/2019      13.29        105.9
  Well 4      10/27/2019      13.27        105.8

有什么建議么? 謝謝!

我認為您正在尋找pd.Grouper 此外,還有一些帶有read_csv的參數,您可以利用這些參數來節省大量代碼:

df = (pd.read_csv('well_pressures.txt', sep='', usecols = [0,3,4], skiprows=20,
                 names=['Date', 'Pressure', 'Temperature'], parse_dates=True)
      .assign(Wellbore='well 4')
      .set_index('Date'))
df = df.groupby(pd.Grouper(freq='1D')).mean() #Also, you can try df = df.resample('D').mean() but I think you are looking to groupby day.
df

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM