2017-07-14 3 views
0

Wie bekomme ich den Datenrahmen, um Typen im Konstruktor zu interpretieren? Ab sofort hält es alles als "Objekt"dtype des DataFrame-Objekts statt int

Hier mein Code ist jetzt:

arr = list(range(120)) + [21]*100 
cat = ["A"]*20 + ["B"]*40 + ["C", "D"] * 20 + ["E", "F" ,"G"] * 30 
df = pd.DataFrame([arr]*3 + [cat], index = ["a1", "a2", "a3", "cat"]).T 
print(df.a1.dtype.name) 
print(df.a3.dtype.name) 
print(df.cat.dtype.name) 

object 
object 
object 
+1

'df.convert_objects (convert_numeric = True) .dtypes' oder 'df.head (1) .applymap (type)'? – Zero

+0

wird das die Zeichenkettenvariable gleich behalten? – Adam

Antwort

1

starten:

np_array = np.array([arr]*3 + [cat]) 
dict = {"a1":np_array[0], "a2":np_array[1], "a3":np_array[2]} 
df = pd.concat([pd.DataFrame({"cat":np_array[3]}), pd.DataFrame(dict, dtype = 'int64')], names = ["a1", "a2", "a3", "cat"], axis = 1) 
+0

Haben Sie keinen offenen Kern rn, aber wird das Array von Strings es brechen? – Adam

+0

schauen Sie sich einfach die Bearbeitung an –

+0

Das ist ein sehr, sehr fallspezifischer Code. Ich war hauptsächlich auf der Suche nach etwas, um Typen automatisch zu interpretieren :) Ich habe einen anderen Hack irgendwo anders gefunden, um das Problem zu beheben. Wenn ich Typen vergleiche, verwende ich np-Klasse (s.dtype, np.number) und es erledigt den Rest – Adam

Verwandte Themen