第一个计时器,真好!
与变量类型略有不同的问题相关: Pandas timeseries resampling and interpolating together
我收集了传感器数据,而且我的时间戳非常不规则,我希望它们以1分钟的间隔保持一致。保存分布并在每分钟获得数据的唯一方法是进行插值。
数据集长达一百万行,但这是标题预览(传感器记录在ISO时间戳中):
Raw DataValue
0 2016-05-01T00:00:59.3+10:00 354.9819946
1 2016-05-01T00:02:59.4+10:00 354.9819946
2 2016-05-01T00:03:59.4+10:00 350.6199951
3 2016-05-01T00:13:00.1+10:00 351.4880066
4 2016-05-01T00:22:00.5+10:00 352.9719849
5 2016-05-01T00:31:01.1+10:00 352.0710144
我目前的代码如下,我正在使用pandas和numpy:
data =
pd.read_csv('C:/Users/user/Documents/Data/cleaneddata1.csv',
parse_dates=True)
data['Raw'].index = pd.to_datetime(data['Raw'].index)
d = data.set_index('Raw')
t = d.index
r = pd.date_range(t.min().date(), periods=(len(data)), freq='T')
d.reindex(t.union(r)).interpolate('index').ix[r]
它不起作用,它返回
r = pd.date_range(t.min()。date(),periods =(len(data)),freq ='T') AttributeError:'str'对象没有属性'date'
这让我很疯狂,我不确定它引用的'str'是否与ISO时间戳有关。
答案 0 :(得分:2)
您正在寻找:
data['Raw'] = pd.to_datetime(data['Raw'])
Raw
是一个列,data['Raw']
返回一个系列,您希望使用它(而不是它的索引)。完成后,我建议使用df.resample
进行插值:
data = data.set_index('Raw').resample('1min').mean()
如果您仍想使用interpolate
,则可以改为使用.agg(interpolate)
。
由于您希望保留原始Raw
列,因此您可以使用:
data = data.assign(RawDt=pd.to_datetime(data.Raw))\
.groupby(pd.Grouper(key='RawDt', freq='1min'))\
.agg({'DataValue' : 'mean', 'Raw' : 'first'}).reset_index(drop=True)