python - 如何基于包含时间戳的 csv 文件名加载数据帧
问题描述
我相信我的问题真的很简单,必须有一个非常简单的方法来解决这个问题,但是由于我对 Python 很陌生,特别是 pandas,我无法自己解决。
我有数百个采用以下格式的 csv 文件:text_YYYY-mm-dd_HH-MM-SS.csv
每个 csv 包含一小时的数据。
我希望能够基于两个变量访问 csv 文件,这些变量名为startTime
和EndTime
,然后,我想将这些日期之间的所有文件收集到一个数据框中。由于我有数百个数据框,因此不能将所有数据框连接成一个巨大的数据框,然后进行过滤。
因此,例如,如果我设置startTime = 2019-10-16 7:00:00
和EndTime = 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
放入一个数据帧中。
希望我能做到简洁而准确。我非常感谢您对此的帮助!也欢迎提出要查找的内容的建议
解决方案
您可以按文件名列表循环并过滤开始和结束之间的日期时间,然后创建 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)
推荐阅读
- c# - C# Selenium - 超时:从渲染器接收消息超时:30.000(会话信息:chrome=88.0.4324.104)
- anylogic - Anylogic自定义代理未加载?
- azure - 电影py:从内存中的文本到语音导入音频
- excel - 使用 VBA 将多个列复制到单独的新工作簿中
- r - 将多个矩阵组合成一个数据帧
- azure-api-management - APIM - 响应数据屏蔽
- flutter - 在一段时间内更改按钮颜色
- apache-kafka - 在运行时设置一个spring cloud stream kafka的主题
- python - Python:如何在一个函数中分别绘制不同的图?
- node.js - 我试图创建一个包含三个成员的船命令,可能吗?,我尝试使用下面的代码但不起作用