2017-02-02 2 views
0

У меня есть разные файлы csv, которые имеют одинаковые столбцы, и необходимо объединить данные в один dataframe/csv для индекса 1-24. Имя каждого файла csv затем становится названием соответствующего столбца. Пример:Объединение столбцов csv с общим индексом в один df

one.csv     two.csv 
Time hour energy  Time hour energy  
00:59 1 0  00:59 1 0 
01:59 2 3  01:59 2 5 
02:59 3 2  02:59 3 8 
...     ... 
23:59 24 6  23:59 24 3 

Combined.csv 
hour one two 
1  0 0 
2  3 5 
3  2 8 
... 
24  6 3 

Ближайшим Я видел это:

path = r'C:\files' 
all_files = glob.glob(os.path.join(path, "*.csv")) 
df_from_each_file = (pd.read_csv(f) for f in all_files) 
concatenated_df = pd.concat(df_from_each_file, ignore_index=True) 

Но это не совсем так, как он добавляет строки, а не столбцы.

ответ

1

Вы должны использовать pd.concat(..., axis=1) параметр, чтобы сцепить ДФЙ по горизонтали:

import os 
import glob 
import pandas as pd 

In [46]: files = glob.glob(r'D:\temp\.data\42011160\*.csv') 

In [47]: pd.concat([pd.read_csv(f, usecols=['hour', 'energy'], index_col='hour') 
    ...:    .rename(columns=lambda x: os.path.basename(os.path.splitext(f)[0])) 
    ...:   for f in files], 
    ...:   axis=1).reset_index() 
    ...: 
Out[47]: 
    hour 1 2 
0  1 0 0 
1  2 3 5 
2  3 2 8 
3 24 6 3 

где:

In [48]: files 
Out[48]: ['D:\\temp\\.data\\42011160\\1.csv', 'D:\\temp\\.data\\42011160\\2.csv']