首页 > 解决方案 > 如何使用多个传感器转换 time.series 数据的 csv 文件?

问题描述

我想用多个传感器转换 uct 时间序列 (iso8601) 数据的 CSV 文件。这是原始数据当前的样子:

当前数据

不同的传感器由名称(客户端列)描述,并具有不同的轴值。

这是我希望数据的方式:

期望的输出

PS:传感器之间的测量时间可能不同,并且需要完成一个同步阶段(每 200 毫秒测量一次的时间分类)。

有什么想法/提示可以解决这个问题吗?我对编程很陌生,尤其是 Python,所以我已经没有什么想法了。提前致谢

标签: pythonpandasdata-cleaningcsv

解决方案


这是一个示例,您可以使用假输入来适应您的用例:

完整代码

import pandas as pd

df = pd.read_csv("input.csv")
df["time"] = pd.to_datetime(df["time"])

dsensor1 = df[df["Client"]=="sensor1"]
dsensor2 = df[df["Client"]=="sensor2"]

dout = pd.merge_asof(dsensor1,dsensor2, on="time", tolerance=pd.Timedelta(value=200,unit="milli"), direction="nearest")

代码说明

由于接收时间可能不同,您不能使用通常的 pandas 函数来合并 dataFrame。您必须使用基于时间列的asof 合并(必须对时间值进行排序)。执行此操作的 pandas 函数是 merge_asof.

让我们使用一个假的 input.csv 文件

时间 客户
12:50:27.724 传感器1 1
12:50:27.809 传感器2 5
12:50:28.824 传感器1 2
12:50:28.924 传感器2 8

表 1:假输入.csv

这里我假设 ',' 是 input.csv 文件中的字段分隔符。然后我们需要告诉 Pandas “时间”列是一个时间类型。为了做到这一点,我使用了该to_datetime功能。

df = pd.read_csv("input.csv")
df["time"] = pd.to_datetime(df["time"])
时间 客户
0 2021-06-27 12:50:27.724000 传感器1 1
1 2021-06-27 12:50:27.809000 传感器2 5
2 2021-06-27 12:50:28.824000 传感器1 2
3 2021-06-27 12:50:28.924000 传感器2 8

然后我们从传感器1和传感器2中提取两个单独的数据帧

dsensor1 = df[df["Client"]=="sensor1"]
dsensor2 = df[df["Client"]=="sensor2"]

这里对于sensor1,dsensor1是:

时间 客户
0 2021-06-27 12:50:27.724000 传感器1 1
2 2021-06-27 12:50:28.824000 传感器1 2

然后我们只需要在两个数据帧之间进行软合并,容差为 200 毫秒。方向参数意味着熊猫将加入时间值在容差范围内最接近的行 。

dout = pd.merge_asof(dsensor1,dsensor2, on="time", tolerance=pd.Timedelta(value=200,unit="milli"), direction="nearest")
时间 客户x x 客户y _
0 2021-06-27 12:50:27.724000 传感器1 1 传感器2 5
1 2021-06-27 12:50:28.824000 传感器1 2 传感器2 8

推荐阅读