2016-08-04 5 views
0

Ich möchte mit read_csv in einen Datenrahmen einlesen. Zum Beispiel:Ein Datenframe einlesen und einige Spalten umwandeln

data = pd.read_csv("foo.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str}) 

Außer foo.txt hat die peinliche Eigenschaft, dass die ersten beiden Spalten in Hex sind. Z. B

ff462 44e44 house 

Sie können mit int("ff462", 16) einen Hex-Wert in einen int umwandeln. Wie kann ich die Daten einlesen und sicherstellen, dass die ersten beiden Spalten in dtype uint32 konvertiert werden?

+0

Sie einen 'converters' Parameter anwenden können, die nimmt ein dict, siehe eine gute Demo auf http://www.gregreda.com/2013/10/26/working-with-pandas-datarefames/ – Jan

+0

@Jan Das sieht gut aus. Kannst du hex direkt in uint32 konvertieren? – eleanora

Antwort

1

Sie können in den Daten als String lesen und dann konvertieren ...

data = pd.read_csv("foo.txt", sep=' ', header=None, dtype=str) 
data.iloc[:, [0, 1]] = df.iloc[:, [0, 1]].apply(lambda x: int(x, base=16)).astype(np.uint32) 
+0

Wird das Uint32 machen? – eleanora

+1

Aktualisiert mit einer Art Besetzung – Alex

+0

Vielen Dank. Da die Datei sehr groß ist, würde ich es am liebsten konvertieren, während sie gelesen wird, aber ich werde auch Ihre Lösung versuchen. – eleanora

2

Offensichtlich funktioniert diese (cf.here):

data['1'] = data.1.apply(lambda x: int(x,base=0)) 
data['1'] = data['1'].astype(np.uint32) 
+0

Wird das Uint32 machen? – eleanora

+0

jetzt sollte es :) – datahero

Verwandte Themen