按创建日期过滤多个 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)

Python,熊猫连接多个数据帧

形成一个循环将多个 .csv 文件连接成一个 .csv 文件

如何使用 gsutil 将多个 csv 文件连接成一个具有单个标题的 csv 文件

迭代 .csv 文件并分别命名数据框