Pandas DataFrame объединяется по новой оси - PullRequest
0 голосов
/ 28 мая 2020

У меня есть каталог с более чем 1000 CSV-файлов, которые я хочу прочитать и сохранить во фрейме данных, чтобы затем сохранить их в файл. Я хотел бы, чтобы размеры фрейма данных были [файл, строка в файле, содержимое строки]. Вот что я придумал до сих пор:

import pandas as pd
import glob

csv_files = glob.glob("data/*sample.csv")
df = (pd.read_csv(f) for f in csv_files)
dataset = pd.concat(df, ignore_index=True)

Это дает мне фрейм данных с формой [строка, содержимое строки], но я больше не могу видеть, из какого файла эта строка. Может ли кто-нибудь помочь мне здесь?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Немного длиннее, чем у Джезраэля, но это то, что я использовал целую вечность. Хотя, наверное, пора сделать его более кратким.

os.chdir('C:/')
file_list = []
for file in os.listdir():
    df = pd.read_csv(file)
    df['Filename'] = file
    file_list.append(df)
    df = pd.concat(file_list, ignore_index=True)
0 голосов
/ 28 мая 2020

Вы можете создать список всех имен файлов без нашего расширения в списке, а затем перейти к параметру keys в concat, поэтому создается MultiIndex. Последним удалите второй уровень и преобразуйте его в индекс:

from os.path import splitext, basename

csv_files = glob.glob("data/*sample.csv")
names = (splitext(basename(x))[0] for x in csv_files)
dfs = (pd.read_csv(f) for f in csv_files)

df = (pd.concat(dfs, keys=names)
        .reset_index(level=1, drop=True)
        .rename_axis('New')
        .reset_index())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...