2016-05-28 9 views
0

ich unterhalb der Linie bin mit schwimmen eine csv-Datei, in Spalte B endet als str Format zu lesen und ich es nicht schaffen, es zu konvertieren direkt zu schweben:wie str konvertieren in Pandas Datenrahmen

df = pd.read_csv('data.csv', sep=";", encoding = "ISO-8859-1") 

dies erzeugt ein Datenrahmen, in der alle Spalten in str Format sind:

  A  B 
    0 Emma  -20,50 
    1 Filo  -15,75 
    2 Theo  17,23 

Wie Sie die Dezimalstellen durch getrennt feststellen können ‚‘ statt ‚‘ weil es deutscher csv ist. Ich habe versucht, die folgenden schon (vergeblich):

..., dtype={'B': np.float32}, decimal= ',' , .... 

Jede Idee, wie ich es in den Leseprozess erledigen könnte?

Änderung nach dem csv Lesen funktioniert (aber das ist eine ineffiziente zusätzlichen Schritt, den ich vermeiden möchte), ist es das, was ich benutze:

df['B'] = df['B'].str.replace(',', '.').astype(float) 

Antwort

0

Für mich ist es schön funktioniert, ich dtype={'B': np.float32} nur weglassen:

import pandas as pd 
import io 

temp=u"""A;B 
0;Emma;-20,50 
1;Filo;-15,75 
2;Theo;17,23""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep=";", encoding = "ISO-8859-1", decimal= ',') 
print (df) 
     A  B 
0 Emma -20.50 
1 Filo -15.75 
2 Theo 17.23 

print (df.dtypes) 
A  object 
B float64 
dtype: object 

EDIT:

ich denke Problem einige Dezimalzahlen sein können, sind . und einige ,, dann 0.123.258 verwenden:

import pandas as pd 
import io 

temp=u"""A;B 
0;Emma;-20,50 
1;Filo;-15.75 
2;Theo;17,23""" 


def converter(x): 
    return float(x.replace(',','.')) 

#define each column 
converters={'B': converter} 

#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), 
       sep=";", 
       encoding = "ISO-8859-1", 
       converters=converters) 
print (df) 

0 Emma -20.50 
1 Filo -15.75 
2 Theo 17.23 

print (df.dtypes) 
A  object 
B float64 
dtype: object 
+0

danke für die schnelle Antwort, aber für mich funktioniert das immer noch nicht. Ich finde das sehr seltsam. –

+0

Bearbeiten funktioniert nicht auch? – jezrael

+0

Nein, das ist nicht das Problem. Alle Dezimalstellen sind wirklich ",". Aber es gibt einige 0 Werte (also keine Dezimalzahl) und einige NaN. –