2016-09-20 4 views
1

Как добавить несколько CSV-файлов вместе и дополнительный столбец, чтобы указать, откуда появился каждый файл?Как объединить файлы CSV с Pandas (и добавить идентифицирующую колонку)

До сих пор у меня есть:

import os 
import pandas as pd 
import glob 

os.chdir('C:\...') # path to folder where all CSVs are stored 
for f, i in zip(glob.glob('*.csv'), short_list): 
    df = pd.read_csv(f, header = None) 
    df.index = i * len(df) 
    dfs.append(df) 

all_data = pd.concat(dfs, ignore_index=True) 

Это все работает хорошо, за исключением того, идентифицирующей колонки. i - это список strings, который я хочу поместить в колонку A all_data. Одна строка для каждой строки каждого столбца. Вместо этого он возвращает много цифр и дает TypeError: Index(....) must be called witha collection of some kind.

Ожидаемый результат:

str1 file1entry1 
str1 file1entry2 
str1 file1entry3 
str2 file2entry1 
str2 file2entry2 
str2 file2entry3 

Где short_list = ['str1', 'str2', 'str3'] и file1entery1, file2entry2... etc приходит из файлов CSV у меня уже есть.

Я не смог получить все это в одной строке, как предлагалось, однако он указал мне в правильном направлении.

for f zip(glob.glob('*csv')): 
    df = pd.read_csv(f, header = None) 
    df = df.assign(id = os.path.basename(f)) # simpler than pulling from the array. Adds file name to each line. 
    dfs.append(df) 

all_data = pd.concat(dfs) 
+1

Нет необходимости использовать '* LEN (ДФ)'. При присвоении скаляру новому столбцу значение применяется к каждой строке. – Parfait

+0

Обратите внимание, что вам действительно не нужно использовать Pandas здесь. Вы можете просто использовать модуль 'csv'. –

ответ

3

вы можете использовать .assign(id=i) метод, который добавит id столбец каждой анализируемой CSV и заселить его со значением i:

df = pd.concat([pd.read_csv(f, header = None).assign(id=i) 
       for f, i in zip(glob.glob('*.csv), short_list)], 
       ignore_index=True) 
+0

Хотел ответить на ваш комментарий. 'str1, str2, str3' сохраняются в' short_list'. Опечатка. –

Смежные вопросы