如何在Tensorflow中使用向前填充在不规则索引上合并多个文件

时间:2018-10-13 03:43:05

标签: python tensorflow machine-learning

背景

我有多个csv文件中的时序数据,每个文件包含不同种类的传感器功能。我正在尝试将这些文件中的功能合并到一个通用的时间戳索引中。

我遇到的麻烦是,记录一行数据的时间戳与某个常规间隔不对应,而是与传感器更新其值的时间对应。

问题:

我正在寻找一种以类似“前向填充”的方式将这些文件合并在一起的方法,如果数据集在给定的时间戳记中没有条目,则它将填充先前条目的值。

例如,如果我的两个数据文件是

A.csv
time  X1  X2
  00   1   2
  01   3   4
  02   5   6
  03   7   8

B.csv
time  X3  X4
  00  10  11
  02  12  13

我想要一个带有值的最终数据集

time  X1  X2  X3  X4
  00   1   2  10  11
  01   3   4  10  11
  02   5   6  12  13
  03   7   8  12  13

我可以使用我的张量流估计器。

我曾尝试将不同的CsvDatasets合并在一起,但是似乎无法“暂停”某个值上的数据集迭代器以传播它,并以所需的方式将其与其他数据集迭代器合并。

(我知道我可以通过在时间索引上进行外部联接然后执行pd.ffill来对pandas进行此操作,但是我相信我将需要在内存中使用整个数据集,而我想避免这样做。由于时间索引不规则,因此也不要选择将数据分块加载。)

有人知道创建这样的管道的最佳方法吗?

1 个答案:

答案 0 :(得分:0)

您可以利用pd.concat([A, B], axis=1)默认将AB的索引进行合并,然后ffill的结果来进行熊猫合并

示例:

A = pd.read_csv('A.csv')
B = pd.read_csv('B.csv')

A = A.set_index('time')
B = B.set_index('time')

res = pd.concat([A, B], axis=1).ffill()
res

res的打印结果是:

      X1  X2    X3    X4
time                    
0      1   2  10.0  11.0
1      3   4  10.0  11.0
2      5   6  12.0  13.0
3      7   8  12.0  13.0