【问题标题】:How read multiple csv files and convert them to a 3d dataframe如何读取多个 csv 文件并将它们转换为 3d 数据框
【发布时间】:2020-08-07 23:17:59
【问题描述】:

我有多个 .csv 文件。它们具有相同的列大小但不同的行数。我想制作一个第三维显示每个文件的数据框。我尝试读取每个文件并将其保存到数据框,然后将它们附加到列表中,但是当将列表转换为数据框时,输出是二维数据框(如果我们有 5 个文件,则输出是 (5, 1) 数据框)。

path = "Something"
filelist = os.listdir(Path)
print(filelist)
all_csv_files = []
for x in filelist:
    df = pd.read_csv(Path + "\\" + x)
    all_csv_files.append(df)

dataset = pd.DataFrame(all_csv_files)
dataset.shape

还尝试读取每个文件并将其保存到一个 numpy 数组并堆叠它们(np.stack),但数组的大小不同。 pandas.Panel 也已弃用。

例如,如果我们有 2 个 csv 文件,如第一个是:

a,b,c,d
a,b,d,c
b,x,y,z

第二个是:

1,2,3,4
2,3,5,4

我想输出如下:

[
  [[a,b,c,d],[a,b,d,c],[a,x,y,z]],
  [[1,2,3,4],[2,3,5,4], [Nan, Nan, Nan, Nan]]
]

即 (2,3,4)。

我宁愿不填nan,但如果没有办法也可以。

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    如果您在所有 csv 文件中都有相同的列,那么您可以尝试下面的代码。我添加了 header=0 以便在读取 csv 后第一行可以指定为列名。

    import pandas as pd
    import glob
    
    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)
    

    您可以阅读这个 stackoverflow 问题 (Import multiple csv files into pandas and concatenate into one DataFrame),然后您可以轻松地终止您的场景。

    您可以使用 Asyncio 加快读取所有 xyz.csv 文件的速度

    【讨论】:

    • concat 不会添加另一个维度,因此它最终会成为 2d 数据框,但会将所有行并排连接在一起。这种输出方式将是 (11994, 815),其中 815 是列大小,11994 是文件行的总和。 (每个大约 2k 行。)
    • @vahidbashiri 请分享虚拟 csv 文件将尝试给出解决方案。
    • 它是典型的 csv 文件。我编辑问题以包含虚拟 csv 文件。
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2022-10-12
    • 2018-05-23
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多