我正在使用python在pandas中开发一个项目。我收到这样的.csv文件作为输入:
Name Timestamp Data
A1 259 [1.1,1.0,0.1]
A1 260 [-0.1,1.2,0.3]
A1 261 [0.1,0.2,-0.3]
...
A1 14895 [1.4,0.3,1.8]
...
A2 278 [-1.1,1.2,0.4]
A2 353 [-0.1,1.2,0.3]
A2 409 [-0.1,1.2,0.3]
...
A2 14900 [-0.1,1.2,0.3]
...
A1140 107 [-0.5,-1.0,-1.0]
A1140 107 [0.6,0.1,0.3]
A1140 114 [-1.1,-1.2,0.3]
...
A1140 14995 [-1,1.2,0.4]
我有1140多个名称,每个名称有成百上千个数据。 数据以200 Hz的频率记录,我认为时间戳记数字表示毫秒,尽管我不确定,我无法访问此信息。 我必须重新采样到50 Hz频率。
我该怎么做?我是否需要将时间戳转换为实际秒数,然后将.resample()
函数使用0.25s?我应该使用.groupby["Name"]
函数吗?
预先谢谢你!
答案 0 :(得分:1)
即使您不确定时间戳记,我也无法完整地回答这个问题,但我会尽力为您提供一些一般性准则。
您在这里拥有的称为面板数据,每个“名称”都有许多不同的时间序列。
groupby(['Name']).apply(<func>)
确实是一种有用的方法,因为它允许分别操纵每个不同的名称,从而使您可以使用时间序列的更简单的数据类型。
时间序列是以下类型的数据:
Date Value
2000-01-01 00:00:00 3
2000-01-01 00:03:00 12
2000-01-01 00:06:00 21
如您所见,每个样本的采集时间为3分钟。我们可以这样呼叫resample()
并将其转换为10分钟:
series.resample('10T').mean()
请注意,您可以使用mean
代替.apply(<func>)
选择下采样方法。有关频率的更多信息,请考虑this问题。
df.groupby(['Name']).resample('20L').mean()
或带有for循环遍历每个名称,并对每个系列分别使用重采样。