Panda数据帧日期时间索引的重新采样错误



我正在运行一个txt。通过python文件,并尝试将数据重新采样为每日平均值。txt。文件包含实际数据集之前的文本,所以我读取了文件,然后删除了第一行。整个数据集大约有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"的实例;。我不知道如何解决这个问题,即使在重置索引之后也是如此。当我将日期列设置为索引并尝试重新采样时,会出现一个关键错误。我能做到这一点的唯一方法是在读取文件时对日期列进行索引,并在导入文件之前删除不必要的前几行(,但我不想这样做(。

预期输出:

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

最新更新