按创建日期过滤多个 csv 文件并连接成一个 pandas DataFrame
Posted
技术标签:
【中文标题】按创建日期过滤多个 csv 文件并连接成一个 pandas DataFrame【英文标题】:Filtering multiple csv files by creation date and concatenate into one pandas DataFrame 【发布时间】:2021-07-07 21:53:57 【问题描述】:我只想读取 csv 过去 7 天从目录创建的 csv 文件到 pandas 并将它们连接到一个大 DataFrame 中。我一直无法弄清楚。这是我目前所拥有的:
编辑:我正在尝试按 csv 文件的创建日期进行过滤,而不是按 csv 中的任何列进行过滤。
from datetime import datetime, timedelta
import pandas as pd
import glob
fileday = datetime.now() - timedelta(7)
fileday = datetime.strftime(fileday, '%Y%m%d')
path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
【问题讨论】:
csv 中有日期列,还是文件名中包含的日期?无论如何,请更新您的示例以包含它。 我正在尝试按 CSV 文件的创建日期进行过滤,而不是 csv 中的列。 【参考方案1】:由于您使用的是 pandas,所以让我们结合使用 pathlib 和 pandas。
from pathlib import Path
import pandas as pd
p = Path(r'C:\DRO\DCL_rawdata_files')
all_files = p.glob('*.csv')
df = pd.DataFrame('files' : all_files)
df['date'] = pd.to_datetime(df['files'].apply(lambda x : x.stat().st_mtime),unit='s')
# filter your files.
trg_files = df[df['date'] >= pd.Timestamp('now') - pd.DateOffset(days=7)]['files'].tolist()
dfs = [pd.read_csv(f) for f in trg_files]
【讨论】:
【参考方案2】:你可以这样做。
df = pd.DataFrame()
for filename in all_files:
df = df.append(pd.read_csv(filename))
【讨论】:
以上是关于按创建日期过滤多个 csv 文件并连接成一个 pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章
将多个csv文件导入pandas并连接成一个DataFrame
创建一个按日期月份过滤的下拉列表(pandas + plotly)
形成一个循环将多个 .csv 文件连接成一个 .csv 文件