2016-05-06 2 views
0

Ich habe zahlreiche separate Gerätedateien von X, Y (Ganzzahl) Spalte Daten. Alle Arrays haben die gleiche Dimension. Die X-Spalte ist für jede Datei gleich, die Y-Spaltennummern sind unterschiedlich. Wenn möglich, möchte ich die Y-Spalten der aufeinander folgenden Dateien mit der ersten Datei verketten und ein neues einzelnes großes Array mit dem ersten X und mehreren Ys schreiben? Wie folgt aus:Verwenden Sie pandas (und glob?), Um zahlreiche (csv) Datentextdateien aus einem Verzeichnis zusammenzuführen.

file1 = X1 Y1 Datei2 = X1 Y2 file3 = X1 Y3 ... neue Datei Ergebnis sollte sein: X1 Y1 Y2 Y3 ...

gesucht bei Variationen: Import Pandas Daten = pandas.read_csv ('file1.csv')

print (Daten) gibt die erste Datei Array ok

benötigen über aufeinanderfolgende Dateien zu öffnen und Schleife Spalte zu verbinden Y in Datei1 ...

Antwort

1

Sie können so etwas tun:

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)) 

um Ihre Y Spalten zu nennen wie Y1, Y2, etc .:

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 

Testdaten:

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 

Test:

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

Hey MAXU, das funktioniert super !!! Ich habe es verwendet, um einen riesigen Datenrahmen in Sekunden zu bauen. Da ich Python ziemlich neu bin, haben Sie eine Empfehlung, die Ergebnisse von "df?" Kann ich df auch zum Plotten an MatPlotLib übergeben? – numpystack

+0

@numpystack, über das Schreiben von Ergebnissen - wenn Sie Leistung meinen, möchten Sie vielleicht [diese Antwort] (http://stackoverflow.com/questions/37010212/what-is-the-fastest-way-to-upload-a) lesen -big-csv-Datei-im-Notizbuch-zum-Arbeiten-mit-Python/37012035 # 37012035). In Bezug auf Matplotlib - Sie müssten angeben, was und wie möchten Sie plotten – MaxU

+0

@numpystack, vielen Dank für die Annahme der Antwort! – MaxU

Verwandte Themen