2016-05-06 4 views
0

У меня есть множество отдельных файлов инструментов данных столбцов X, Y (целочисленный). Все массивы одинаковы. Столбец X одинаковый для каждого файла, номера столбцов Y - разные. Если возможно, я хочу объединить столбцы Y последовательных файлов в первый файл и написать новый один большой массив, содержащий первые X и несколько Ys? Как это:Используйте pandas (и glob?), Чтобы объединить многочисленные текстовые файлы данных csv из каталога.

file1 = X1 Y1 file2 = X1 Y2 file3 = X1 Y3 ... новый результат файл должен быть: X1 Y1 Y2 Y3 ...

Искал на вариации на: импортных панд данных = pandas.read_csv ('file1.csv')

печати (данные) возвращает массив первого файла нормально

нужно открыть и перебираем последовательных файлов присоединиться Y столбец FILE1 ...

ответ

1

вы можете сделать что-то вроде этого:

import os 
import glob 
import pandas as pd 

def get_merged_csv(flist, **kwargs): 
    return pd.concat([pd.read_csv(f, **kwargs).set_index('X') for f in flist], axis=1).reset_index() 

path = 'C:/Users/csvfiles' 
fmask = os.path.join(path, '*mask*.csv') 

df = get_merged_csv(glob.glob(fmask)) 

для того, чтобы назвать ваши Y столбцы как Y1, Y2 и т.д .:

cols = ['{0[0]}{0[1]}'.format(t) for t in zip(df.columns[1:], range(1, len(df.columns)))] 
df.columns = df.columns.tolist()[:1] + cols 

Тестовые данные:

a.csv:

X,Y 
1,11 
2,12 
3,13 

b.csv :

X,Y 
1,21 
2,22 
3,23 

c.csv:

X,Y 
1,31 
2,32 
3,33 

Тест:

In [215]: df = get_merged_csv(glob.glob(fmask)) 

In [216]: df 
Out[216]: 
    X Y Y Y 
0 1 11 21 31 
1 2 12 22 32 
2 3 13 23 33 

In [217]: cols = ['{0[0]}{0[1]}'.format(t) for t in zip(df.columns[1:], range(1, len(df.columns)))] 

In [218]: cols 
Out[218]: ['Y1', 'Y2', 'Y3'] 

In [219]: df.columns = df.columns.tolist()[:1] + cols 

In [220]: df 
Out[220]: 
    X Y1 Y2 Y3 
0 1 11 21 31 
1 2 12 22 32 
2 3 13 23 33 
+0

Эй MaxU, это работает отлично !!! Я использовал его для создания огромного кадра данных за считанные секунды. Поскольку я довольно новичок в Python, есть ли у вас рекомендация по написанию результатов «df?»? Могу ли я передать df в MatPlotLib для построения графика? – numpystack

+0

@numpystack, о выводе результатов - если вы имеете в виду производительность, вы можете прочитать [этот ответ] (http://stackoverflow.com/questions/37010212/what-is-the-fastest-way-to-upload-a -большой-CSV-файл-в-ноутбук-на-работе-с-питона/37012035 # 37012035). Что касается Matplotlib - вам нужно будет указать, что и как вы хотите построить – MaxU

+0

@numpystack, спасибо, что приняли ответ! – MaxU

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

  • Нет связанных вопросов^_^