【问题标题】:Standardizing timeseries in Pandas using interpolation使用插值对 Pandas 中的时间序列进行标准化
【发布时间】:2018-04-01 05:39:59
【问题描述】:

第一个计时器,乖一点!

与变量类型略有不同的问题相关: 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(), period=(len(data)), freq='T') AttributeError: 'str' 对象没有属性 'date'

这让我发疯了,我不确定它所指的“str”是否与 ISO 时间戳相关。

【问题讨论】:

  • 也许只有data['Raw'] = pd.to_datetime(data['Raw'])

标签: python pandas numpy datetime sensors


【解决方案1】:

您正在寻找:

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)

【讨论】:

  • 为什么是mean()?我很好奇
  • @Bharathshetty 我对“插值”的理解。
  • @coldspeed 谢谢!唯一的问题是它快到了,但现在没有正确读取日期和时间。即第一行是 - 2016-04-30 14:00:00 138.247878 但第一行应该有这个日期/时间布局 - 2016-05-01T00:00:59.3+10:00
  • @KaitlynSapier 当列转换为日期时间时,该信息会丢失。请参阅编辑以获取替代解决方案。
  • 太棒了!此外,我如何将插值从平均值更改为 DataValue 的位置 [2] 和位置 [0] 之间的对数差异以获得 DataValue [1] 即如果 DataValue[0] = 19 和 DataValue[2] = 20 =>(1+LOG(DataValue[2]/DataValue[1]))*DataValue[1] => DataValue[1] = 19.43
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2015-08-12
  • 2012-11-06
  • 2015-07-31
  • 2013-02-03
  • 2018-11-11
  • 2020-06-24
相关资源
最近更新 更多