Как читать несколько файлов CSV и преобразовывать их в трехмерный фрейм данных - PullRequest
0 голосов
/ 07 августа 2020

У меня несколько файлов .csv. у них одинаковый размер столбца, но разное количество строк. Я хочу создать фрейм данных, в котором 3-е измерение показывает каждый файл. Я попытался прочитать каждый файл и сохранить его в фрейм данных, а затем добавить их в список, но при преобразовании списка в фрейм данных на выходе получается двухмерный фрейм данных (если у нас есть 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 .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, но если нет способа, это тоже нормально .

1 Ответ

0 голосов
/ 07 августа 2020

Если у вас есть одинаковые столбцы во всех ваших 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)

Вы можете прочитать этот вопрос о переполнении стека ( Импортировать несколько файлов csv в pandas и объединить в один DataFrame ), тогда вы можете легко убить свой сценарий.

вы можете использовать Asyncio для ускорения чтения всех файлов xyz.csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...