如何读取多个csv文件并将其转换为3d数据框

时间:2020-08-07 06:39:03

标签: python pandas numpy

我有多个.csv文件。它们具有相同的列大小,但行数不同。我想制作一个第三维显示每个文件的数据框。我尝试读取每个文件并将其保存到数据框,然后将它们附加到列表,但是当将列表转换为数据框时,输出为二维数据框(如果我们有5个文件,则puth为(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。不建议使用面板。

例如,如果我们有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,但如果没有办法也可以。

1 个答案:

答案 0 :(得分:0)

如果所有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文件的速度