python - 如何使用多个传感器转换 time.series 数据的 csv 文件?
问题描述
我想用多个传感器转换 uct 时间序列 (iso8601) 数据的 CSV 文件。这是原始数据当前的样子:
不同的传感器由名称(客户端列)描述,并具有不同的轴值。
这是我希望数据的方式:
PS:传感器之间的测量时间可能不同,并且需要完成一个同步阶段(每 200 毫秒测量一次的时间分类)。
有什么想法/提示可以解决这个问题吗?我对编程很陌生,尤其是 Python,所以我已经没有什么想法了。提前致谢
解决方案
这是一个示例,您可以使用假输入来适应您的用例:
完整代码
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 |
推荐阅读
- postgresql - k8s docker容器挂载主机,但输出日志文件失败
- javascript - 如何在Javascript中获取作为字符串公开的操作结果
- c# - 在 Form Load 上读取文件并存储在二维数组中
- c++ - C ++ - 列出目录文件并将输出结果保存在txt中
- c# - 无法为 Azure Edge 构建 docker C#,错误 [build-env 6/6] RUN dotnet publish -c Release -o out
- python - 使用 Python 将非常长的二进制字符串编码为可恢复的简单形式的最佳方法?
- image-processing - 使用 ImageMagick 用蒙版图像合成图像
- javascript - 如何在 JavaScript 中复制完全独立于复制对象的对象?
- c++ - std::jthread 从另一个成员函数运行成员函数
- python - 为什么 Appengine 图片旋转会出现缓存资源错误?