2016-06-03 12 views
-1

Ich habe einige CSV-Dateien und ich möchte eine bestimmte Spalte von allen kopieren und speichern Sie es in einer neuen CSV-Datei Spalte weise.Aber den folgenden Code fügen Sie sie in einer einzigen Spalte.Hinzufügen von Daten zu CSV Spalte weise mit Pandas

Auch insgesamt muss ich fast 20M Daten durchgehen, also möchte ich sie nicht in einem einzigen Datenrahmen speichern und sie zuletzt speichern.

Hier ist mein Code:

import os 
import glob 
import pandas as pd 
k= glob.glob("*.csv") 
colu="Close" 
file="merged.csv" 
temp_dirr="./temp/" 
if not os.path.exists(temp_dirr): 
    os.makedirs(temp_dirr) 

filename=temp_dirr+file 

df=pd.read_csv(k[0])[colu].dropna() 
df.to_csv(filename,header=False,index=False) 
for i in k[1:]: 
    df=pd.read_csv(i)[colu].dropna() 
    df.to_csv(filename,mode="a",header=False,index=False) 

und hier ist die Ausgabe merged.csv Datei

23.6 1065 23.45 1150 172.7 11098 11443.3

Aber ich möchte, dass die Ausgabedatei wie diese 23.6 172.7 1065 11098 23.45 11443.3 1150

Hier die sein Ordner hat 2 CSV-Dateien und die beiden Spalten sind für die "close" Spalte dieser 2 Dateien. Wie fügt man sie spaltenweise hinzu?

+0

Wie möchten Sie Ihre Dateien zusammenführen? Zum Beispiel sollte die erste Reihe von jeder Datei in der ersten Zeile der Ergebnisdatei landen - es könnte funktionieren, wenn Sie '.dropna()' nicht verwenden würden. Wenn nicht, bitte klären Sie, wie Sie Ihre Daten aus verschiedenen Dateien verbinden wollen. – MaxU

+0

Die '' close'' ist die 9. Spalte dieser csv-Datei und ich brauche diese Spalte. Jetzt 9. Spalte Form 1. Datei Land in der 1. Spalte des Ergebnisses CSV-Datei, 9. Spalte aus 2. Datei landen in der 2. Spalte des Ergebnisses und so weiter – Eular

+0

Ich frage nach __rows __... zum Beispiel in der ersten Datei 9-ten Spalte hat diese Werte: '1,2, NaN, 3,4' und Datei2 hat:' 11, NaN, 22,33, NaN' - wie sollte Ihre Ergebnisdatei aussehen? – MaxU

Antwort

1

Sie können es auf diese Weise tun:

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

fmask = '*.csv' 
# column numbers are starting from 0, so 9th column has index 8 
df = get_merged_csv(glob.glob(fmask), usecols=[8]) 
df.to_csv(filename,mode="a",header=False,index=False) 
+0

wie lange Dieser einzelne Datenrahmen kann halten? Da ich 2K Dateien mit fast 5K Datenzeilen habe – Eular

+0

hängt es von Ihrem Speicher ab und ob Sie 32-Bit- oder 64-Bit-Systeme/Python/etc verwenden. Normalerweise arbeite ich mit 10-14GB Datenrahmen auf meinem Notebook (16 GB RAM, Windows 7 64-Bit, Python 3.5 64-Bit) - ohne Probleme. So sollten Ihre 20MB überhaupt kein Problem sein, selbst auf 32-Bit-System mit 3,5 GB RAM Begrenzung – MaxU

+0

Es ist nicht 20MB, es ist 20 Millionen – Eular

0

Ich bin nicht sicher, wie diese Pythond mit zu tun, aber in R, es ist sehr einfach.

Zusammenführen aller Spalten in File1 und Column12 in File2.

import pandas as pd 
file1 = pd.read_table('C:\\Users\Users\\your_path_here\\Book1.csv', delimiter=',', header=None) 
file2 = pd.read_table('C:\\Users\\Users\\your_path_here\\Book2.csv', delimiter=',', header=None) 
file2_short = file2.ix[:,12:13] 

#print (file2_short) 
frames=[file1, file2_short] 
new = pd.concat(frames) 
new.to_csv('C:\\Users\\your_path_here\\newfile.csv') 
Verwandte Themen