【问题标题】:Python: Alternative to looping through 60000 rowsPython:替代循环遍历 60000 行
【发布时间】:2016-05-02 09:03:45
【问题描述】:

我有 2 个 Excel 文件。 文件 1 说明: - 数据频率:1Hz - 总行数:62,000

文件 2 说明: - 数据频率:10 Hz - 总行数:616,000

手头的任务:

要合并两组数据,对文件 2 使用同一秒内 10 个数据点的平均值。

两个文件中的第一列是时间戳,并且记录的数据持续时间相同。但是,时间戳并不相同,并且总是以毫秒为单位。

我的方法: 我使用 pandas 将 excel 文件作为 Dataframes 读取。

对于较小的数据集,我已经能够使用 for 循环来完成此操作。但是,由于数据量大,使用 for 循环非常麻烦且速度慢。 为了在文件 2 中对每秒 10 个点进行滚动平均,我之前使用了嵌套的 for 循环。同样,由于数据的性质,几乎不可能使用相同的方法。

对于解决此问题的方法,我将不胜感激。

【问题讨论】:

  • 您可以只 resample 第二个 df 然后截断日期时间,因此毫秒无关紧要,因为您重新采样 10 hz 以匹配 1hz 采样,因此您可以删除毫秒组件跨度>
  • 据我了解,resample 需要一个恒定的时间增量。虽然每秒有 10 个数据点,但每次记录数据时,时间增量大约会变化 2-3%。
  • 那么您必须决定如何存储您的数据,2-3% 的差异是否重要取决于您。无论如何,您无法进行完全匹配,因此您需要想出一些策略来合并您的数据

标签: python excel loops pandas dataframe


【解决方案1】:

您可以根据十个组将组分配给您的大型数据框,然后使用 groupby 获取平均值。

df_big['group'] = [i // 10 for i in range(len(df_big))]  # Python 2 truncation.
df_big.groupby('group').mean()

如果您提供这两个文件的一些示例数据,我可以完善这个答案。

【讨论】:

  • 谢谢,这对我有用。但是,仍然存在将数据从 df_big 关联到 df_small 的问题。就目前而言,我无法运行真/假算法来检查时间戳匹配的位置。我希望能够合并两个文件中的数据。
  • 这就是为什么我需要查看一些数据。试试 df_big.head() 和 df_small.head()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多