首页 > 解决方案 > 如何基于包含时间戳的 csv 文件名加载数据帧

问题描述

我相信我的问题真的很简单,必须有一个非常简单的方法来解决这个问题,但是由于我对 Python 很陌生,特别是 pandas,我无法自己解决。

我有数百个采用以下格式的 csv 文件:text_YYYY-mm-dd_HH-MM-SS.csv每个 csv 包含一小时的数据。

我希望能够基于两个变量访问 csv 文件,这些变量名为startTimeEndTime,然后,我想将这些日期之间的所有文件收集到一个数据框中。由于我有数百个数据框,因此不能将所有数据框连接成一个巨大的数据框,然后进行过滤。

因此,例如,如果我设置startTime = 2019-10-16 7:00:00EndTime = 2019-10-16 09:00:00,那么我想将理解该时间间隔之间的数据的所有 csv 文件收集到一个数据帧中。text_2019-10-16_7:00:00因此,text_2019-10-16_8:00:00 仅将 csv 文件text_2019-10-16_9:00:00放入一个数据帧中。

希望我能做到简洁而准确。我非常感谢您对此的帮助!也欢迎提出要查找的内容的建议

标签: pythonpandascsvtimestamp

解决方案


您可以按文件名列表循环并过滤开始和结束之间的日期时间,然后创建 DataFrame by read_csv,附加到list被调用out和最后使用concat

startTime = '2019-10-16 7:00:00'
EndTime = '2019-10-16 09:00:00'


files = ['text_2019-10-16_7:00:00.csv',
         'text_2019-10-16_8:00:00.csv',
         'text_2019-10-16_9:00:00.csv',
         'text_2019-10-16_19:00:00.csv']

startTime = pd.to_datetime(startTime)
EndTime = pd.to_datetime(EndTime)

out = []
for x in files:
    date = pd.to_datetime(x.split('_', 1)[1].split(.)[0], format='%Y-%m-%d_%H:%M:%S')
    if date >= startTime and date <= EndTime:
        out.append(pd.read_csv(x))

df = pd.concat(out, ignore_index)

或者:

from datetime import datetime

startTime = datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S')
EndTime = datetime.strptime(EndTime, '%Y-%m-%d %H:%M:%S')

out = []
for x in files:
    date = datetime.strptime(x.split('_', 1)[1].split(.)[0],, '%Y-%m-%d_%H:%M:%S')
    if date >= startTime and date <= EndTime:
        out.append(pd.read_csv(x))

df = pd.concat(out, ignore_index)

推荐阅读