2016-11-19 6 views
2

Ich habe drei TXT-Dateien mit Daten, 4 Spalten von Zahlen.Ich muss sie zu einem Datenrahmen (Dimension [3, n]), wo n ist die Länge von Spalte). Ich brauche nur eine Spalte aus jeder Datei Ich entschied mich für die Verwendung der Series.from_csv() - Funktion, aber ich kann die Ausgabe nicht verstehen. Ich habe diesen Code schreiben:Verstehen nicht Ausgabe von Pandas.Series.from_csv()

names = glob.glob("*.txt") 
for i in names: 
    rank = pd.Series.from_csv(i,sep=" ",index_col = 3) 
    print rank 

Und das mir eine Spalte meiner Daten drucken (das ist gut), sondern auch eine Spalte ganze mit Nullen wie folgt gefüllt:

0.039157 0 
0.039001 0 
0.038524 0 
0.038579 0 
0.038385 0 

Was finde ich mehr bizzare ist, wenn ich

rank = pd.Series.from_csv(i,sep=" ",index_col = 3).values 

ich diese bekam verwenden:

[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 

Also bedeutet dies, dass diese Nullen Werte aus Dateien gelesen wurden? Dann, was ist die erste Spalte von vorher? Ich habe viele Methoden ausprobiert, aber ich habe es versäumt, dies zu verstehen.

Antwort

2

Ich glaube, Sie häufiger read_csv mit delim_whitespace=True und usecols zum Filtern Spalte verwenden können, zuerst anhängen alle DataFrames-listdfs und verwenden Sie dann concat:

dfs = [] 
names = glob.glob("*.txt") 
for i in names: 
    rank = pd.read_csv(i,delim_whitespace=True,usecols=[3]) 
    print rank 
    dfs.append(rank) 

df = pd.concat(dfs, axis=1) 

Oder mit sep='\s+' - Separator ist beliebig Leerzeichen:

dfs = [] 
names = glob.glob("*.txt") 
for i in names: 
    rank = pd.read_csv(i,sep='\s+',usecols=[3]) 
    print rank 
    dfs.append(rank) 

df = pd.concat(dfs, axis=1) 

Sie können auch list comprehension:

verwenden
files = glob.glob("*.txt") 
dfs = [pd.read_csv(fp, delim_whitespace=True,usecols=[3]) for fp in files] 
df = pd.concat(dfs, axis=1)