【问题标题】:reading multiple files containing multiple csv's读取包含多个 csv 的多个文件
【发布时间】:2018-10-28 13:38:32
【问题描述】:

我有 2 年的每日销售数据,分为月度文件。

我有多个文件夹,每个文件夹包含多个 csv。 我想在 Python 中使用 pandas 阅读它。

我尝试了 1 个文件夹

    path =r'C:\DRO\DCL_rawdata_files' # use your path
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
    df = pd.read_csv(file_,index_col=None, header=0)
    list_.append(df)
frame = pd.concat(list_)

但如前所述,这适用于 1 个文件夹,同样我已经为 100 个文件夹运行了 100 次相同的代码块。

他们是否有某种方法可以使用 reduce 它为每个文件夹一次又一次地运行?

【问题讨论】:

  • 您的问题可能是因为文件仍处于压缩状态。在这种情况下,我可能会先尝试整理您的数据,然后再将其导入 pandas。
  • 您能否提供完整的追溯和最少的数据来重现您的问题?
  • @Alex 我不能他们是数百个,读入 python 的原因也是为了清理它。
  • @Shubham。因此“最少的数据”。解压缩一个文件,然后创建一个包含几个已编辑的 CSV 文件和几行数据的 zip。如果您不想共享数据,请伪造数据。

标签: python-3.x pandas csv


【解决方案1】:

我已经按照你描述的做了一个模型,文件夹结构如下:

/test/so/
  1/
    a.csv
    b.csv
  2/
    c.csv
    d.csv
  3/
    e.csv
    f.csv

以下代码:

  • 为您的输入目录创建一个pathlib.Path
  • 检查此目录及其子目录中是否有后缀为 .csv 的文件
  • 遍历.csv 文件列表,将它们打开为 pd.DataFrame
  • 然后将此 DataFrame 列表连接到单个 DataFrame 中

此方法的局限性在于它要求您的所有文件都是相同的格式。

import pandas as pd
from pathlib import Path

p = Path('/test/so/')

files = []
file_extensions = ['.csv']
for file_or_directory in p.iterdir():
    if file_or_directory.is_file() and ''.join(file_or_directory.suffixes).lower() in file_extensions:
        files.append(file_or_directory)
    elif file_or_directory.is_dir():
        files.extend([x for x in file_or_directory.iterdir() if ''.join(x.suffixes).lower() in file_extensions])
print(files)
[PosixPath('/test/so/1/a.csv'), PosixPath('/test/so/1/b.csv'),
 PosixPath('/test/so/2/c.csv'), PosixPath('/test/so/2/d.csv'),
 PosixPath('/test/so/3/e.csv'), PosixPath('/test/so/3/f.csv')]

df_list = []
for f in files:
    try:
        df_list.append(pd.read_csv(filepath_or_buffer=f))
    except pd.errors.ParserError as e:
        raise pd.errors.ParserError('Input file probably not expected format')
df = pd.concat(df_list, ignore_index=True)

print(df)
    0   1   2   3
0   a   b   c   d
1   e   f   g   h
2   i   j   k   l
3   m   n   o   p
4   q   r   s   t
5   u   v   w   x

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2020-08-25
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多