несколько CSV в один и имя файла в качестве имени столбца в Pandas - PullRequest
1 голос
/ 25 сентября 2019

У меня есть каталог с сотней CSV-файлов внутри.Один из CSV выглядит следующим образом:

Time    ID
09:00   A
..      ..

Я хочу объединить все CSV в один фрейм данных с включением имени файла (добавляется по оси = 1) Я использовал этот код:

files = glob.glob(data/*.csv')
df = pd.concat([pd.read_csv(fp).assign(File=os.path.basename(fp).split('.')[0]) for fp in files], axis=1)
df.to_csv('new.csv')
df

Я получил результат, похожий на этот

Time    ID  File  Time  ID  File    ..
09:00   A   01    09:00 B   02      ..
..      ..  ..    ..    ..  ..      ..

Я хочу объединить имя столбца ID с именем файла в качестве имени столбца.мой ожидаемый результат выглядит так:

Time    01_ID   Time    02_ID   ..
09:00   A       09:00   B       ..
..      ..      ..      ..      ..

1 Ответ

2 голосов
/ 25 сентября 2019

Сначала вы можете использовать словарное понимание:

comp = {os.path.basename(fp).split('.')[0]: pd.read_csv(fp) for fp in files}
df = pd.concat(comp, axis=1)

А затем отфильтровать в понимании списка для преобразования MultiIndex in columns:

df.columns = [f"{a}_{b}" if b == 'ID' else b for a, b in df.columns]
print (df)
    Time 01_ID   Time 02_ID
0  09:00     A  09:00     B

df.to_csv('new.csv')

РЕДАКТИРОВАТЬ: Лучшее решение - создать уникальные имена столбцов:

df.columns = df.columns.map('_'.join)
print (df)
  01_Time 01_ID 02_Time 02_ID
0   09:00     A   09:00     B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...