【问题标题】:Sifting through CSV files for time stamps筛选 CSV 文件以获取时间戳
【发布时间】:2026-01-15 05:20:03
【问题描述】:

我对 python 还很陌生,但有一个问题想解决,但需要一点帮助。

我需要询问用户他们想要哪个目录路径,我已经弄清楚了那部分但是......

从那里我需要找到一种方法来询问用户特定的日期/时间范围日-月-年,小时:分钟:秒,然后过滤掉哪些 csv 文件在该范围内。

从那里,我需要我的程序进入过滤后的 CSV 文件并查看记录在 csv 文件中的时间戳。

根据这些时间戳,我需要计算从一个 csv 文件的结尾到下一个文件的开头是否有任何间隙。

如果有差距,我需要返回一个声明,表明差距有多长。

我看到了一些东西,但无法将它们放在一起!

任何指导将不胜感激!

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python pandas csv


【解决方案1】:

考虑使用 Dask 数据帧 (https://docs.dask.org/en/latest/dataframe.html),它适用于 Pandas 数据帧。

无需深入了解 Dask,您需要知道它在惰性模式下工作,这意味着在使用计算方法显式触发之前不会进行任何处理。这使得编码与 Pandas 略有不同。

下面的例子解决了读取多个文件和查找间隙的部分。数据文件(您可以在这里找到:https://github.com/mchiuminatto/*/tree/master/data) 是频率为 D(一天)的 OHLC 数据,因此间隙条件是任意两个连续日期之间的差异大于 1 天。

import dask.dataframe as dd

# read all the csv files in the directory
# how much is loaded into memory is managed by Dask.

df = dd.read_csv('./data/*.csv')  
                                 
df['date_time'] = dd.to_datetime(df['Time (UTC)'])
df['Time (UTC)'] = dd.to_datetime(df['Time (UTC)'])
df = df.set_index('Time (UTC)')
df['dif'] = df['date_time'] - df['date_time'].shift(1)  # calculates gaps

# no data transformation is performed until you execute compute.
df.compute().head(5)

检查一条记录:

df.loc['2020-01-06 22:00:00'].compute()

过滤相差超过 1 天的时段

_mask = df['dif'] > '1 days' # time unit can be adjusted
df_gap = df[_mask].compute()  # now we persist transformations in a Pandas df: df_gap

df_gap.head(5)

df_gap.tail(5)

【讨论】: