Как объединить несколько файлов CSV в кадр данных Pandas с именами файлов в качестве имен строк? - PullRequest
0 голосов
/ 27 марта 2019

В части 1 у меня есть несколько CSV-файлов, которые я перебираю для создания новых CSV-файлов с краткой статистикой (медианы).Новые CSV-файлы имеют исходное имя файла + "summary_" в начале.С этой частью все в порядке.

В части 2 я хочу объединить все файлы «summary_» (они имеют одинаковые имена столбцов друг с другом), но имена строк в объединенном кадре данных совпадают симя соответствующего файла CSV "summary_", откуда поступают данные.

С помощью stackoverflow я решил часть 1, но еще не часть 2.Я могу объединить все файлы csv, но не только те, в имени которых есть «summary_» (т. Е. Новый файл csv, созданный в части 1), а не с правильными именами строк ...


import os
import pandas as pd
import glob

## Part 1

summary_stats = ['median']

filenames = (filename for filename in os.listdir(os.curdir) if os.path.splitext(filename)[1] == '.csv')

for filename in filenames:
    df = pd.read_csv(filename, )

    summary_df = df.agg(summary_stats)
    summary_df.to_csv(f'summary_{filename}')

## Part 2

path = r'/Users/Desktop/Practice code'
all_files = glob.glob(path + "/*.csv")

list = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    list.append(df)

frame = pd.concat(list, axis=0, ignore_index=True)

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Представляем pathlib.Path, объектно-ориентированный интерфейс с путями, которые упростят вашу жизнь.

Сохраняя свою логику, вы можете использовать glob непосредственно для Path объектов,затем в сочетании с pandas.concat() объедините кадры данных при загрузке CSV-файлов.

import pandas
from pathlib import Path

srcdir = Path(r'/Users/Desktop/Practice code')              # Get current working directory

df = pd.concat(pd.read_csv(file, index_col=None, header=0)  # Concatenate dataframes from generator
               for file in srcdir.glob('summary_*.csv'),    # Using pathlib.Path's glob
               axis=0, ignore_index=True)                   # Keeping your concat settings

Что касается имен строк, вам следует включить в свой вопрос выдержку из ваших сводных файлов _ *. csv и желаемое имя строки..

0 голосов
/ 27 марта 2019
  • Убедитесь, что all_files загружает только файлы, соответствующие «сводке _ *. Csv»

  • Затем вы можете добавлять строки из одного кадра данныхдругому, используя df.append ()

Так что ваш код может выглядеть примерно так

path = r'/Users/Desktop/Practice code'
all_files = glob.glob(path + "/summary_*.csv")

summary_df = None

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    df['row'] = filename.split('summary_')[1].split('.csv')[0]
    df.set_index('row')

    if summary_df is None:
        summary_df = df
    else:
        summary_df = summary_df.append(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...