python - 使用 numpy/pandas 按时间戳合并时间序列数据

标签 python numpy pandas

我有来自三个完全不同的传感器源的时间序列数据作为 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,但我很确定这对我现在尝试做的事情不起作用。谁能指出我正确的方向?

最佳答案

我认为你可以简单地

  • 时间戳定义为每个DataFrameindex(使用set_index)
  • 使用 join 将它们与 'outer' 方法合并
  • 可选择将 timestamp 转换为 datetime

这是它的样子。

# generating some test data
timestamp = [1440540000, 1450540000]
df1 = pd.DataFrame(
    {'timestamp': timestamp, 'a': ['val_a', 'val2_a'], 'b': ['val_b', 'val2_b'], 'c': ['val_c', 'val2_c']})
# building a different index
timestamp = timestamp * np.random.randn(abs(1))
df2 = pd.DataFrame(
    {'timestamp': timestamp, 'd': ['val_d', 'val2_d'], 'e': ['val_e', 'val2_e'], 'f': ['val_f', 'val2_f'],
     'g': ['val_g', 'val2_g']}, index=index)
# keeping a value in common with the first index
timestamp = [1440540000, 1450560000]
df3 = pd.DataFrame({'timestamp': timestamp, 'h': ['val_h', 'val2_h'], 'i': ['val_i', 'val2_i']}, index=index)

# Setting the timestamp as the index
df1.set_index('timestamp', inplace=True)
df2.set_index('timestamp', inplace=True)
df3.set_index('timestamp', inplace=True)

# You can convert timestamps to dates but it's not mandatory I think
df1.index = pd.to_datetime(df1.index, unit='s')
df2.index = pd.to_datetime(df2.index, unit='s')
df3.index = pd.to_datetime(df3.index, unit='s')

# Just perform a join and that's it
result = df1.join(df2, how='outer').join(df3, how='outer')
result

result

关于python - 使用 numpy/pandas 按时间戳合并时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215024/

相关文章:

c++ - 使用 swig 使 C++ 类看起来像一个 numpy 数组

python-3.x - 如何从 numpy.random.normal() 获取特定范围值?

python - 获取包含文本的列中所有行的词频

python - 为什么我手工制作的 numpy 神经网络无法学习?

Python-检查二维数组中的多个项目

python - NumPy Einsum 的黑巫术

python - 根据 Groupby 获取列的值计数

pandas - 如何使用 Databricks 将 CSV 写回 Azure Blob 存储?

python - 如何从许多单独的函数中绘制密度图?

python - 在 C 和 Python 中实现 sendall() 和 recvall()