【发布时间】:2015-08-27 19:12:50
【问题描述】:
我有来自三个完全不同的传感器源的时间序列数据作为 CSV 文件,并希望将它们组合成一个大的 CSV 文件。 我已经设法使用 numpy 的 genfromtxt 将它们读入 numpy,但我不知道从这里做什么。
基本上,我所拥有的是这样的:
表 1:
timestamp val_a val_b val_c
表 2:
timestamp val_d val_e val_f val_g
表 3:
timestamp val_h val_i
所有时间戳都是 UNIX 毫秒时间戳,如 numpy.uint64。
而我想要的是:
timestamp val_a val_b val_c val_d val_e val_f val_g val_h val_i
...所有数据按时间戳组合和排序。这三个表中的每一个都已按时间戳排序。 由于数据来自不同的来源,因此不能保证表 1 中的时间戳也会在表 2 或表 3 中,反之亦然。在这种情况下,空值应标记为 N/A。
到目前为止,我已经尝试使用 pandas 来转换数据,如下所示:
df_sensor1 = pd.DataFrame(numpy_arr_sens1)
df_sensor2 = pd.DataFrame(numpy_arr_sens2)
df_sensor3 = pd.DataFrame(numpy_arr_sens3)
然后尝试使用 pandas.DataFrame.merge,但我很确定这不适用于我现在尝试做的事情。谁能指出我正确的方向?
【问题讨论】:
-
您能否展示您使用
merge尝试过的内容,例如,如果您使用merged = pd.merge(df_sensor1, df_sensor_2, on='timestamp')然后重复df_seonsor3,或者如果您将索引设置为所有dfs 上的时间戳,它应该可以工作那么你可以做pd.concat([df_sensor_1, df_seonsor2, df_sensor3]) -
感谢您的快速回答!我使用了
merge,就像你写的一样,但这显然是一个内部连接,所以只有在所有表中都有时间戳的数据点才会写入合并表。我也尝试过外连接,它确实包含所有数据,但也没有正确排序。我只是尝试了concat。我做了merged = pd.concat([df_sensor1, df_sensor2, df_sensor3], axis=1)和merged.to_csv('out.csv', sep=';', header=True, index=True, na_rep='N/A'),这似乎完成了这项工作。我明天必须验证它。