ich das Excel United Nations Energy Indicators den Code-Schnipsel hier mit Datei lese:Mit read_excel mit Konvertern für das Lesen von Excel-Datei in Pandas Dataframe Ergebnisse in einer numerischen Spalte von Objekttyp
def convert_energy(energy):
if isinstance(energy, float):
return energy*1000000
else:
return energy
def energy_df():
return pd.read_excel("Energy Indicators.xls", skiprows=17, skip_footer=38, usecols=[2,3,4,5], na_values=['...'], names=['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable'], converters={1: convert_energy}).set_index('Country')
Dies führt zu Energieversorgung Spalte den Objekttyp anstelle von float haben. Warum ist es so?
energy = energy_df()
print(energy.dtypes)
Energy Supply object
Energy Supply per Capita float64
% Renewable float64
Eine Vermutung ist, dass es nicht-numerische Einträge gibt, die die 'else'-Bedingung auslösen. Warum nicht 'np.nan' im' else'-Bit zurückgeben? –
Warum überhaupt einen Konverter benutzen? Einfach laden, sehen, ob Pandas einen numerischen Typ bekommt und multipliziert, wenn nicht, die Spalte mit einem erzwungenen 'pd.to_numeric' * 1000000 überschreiben? –
Es stimmt, wenn ich keinen Konverter verwende, ist der Typ float64. Das ist eine Konvertierung, die auf der Spalte ausgeführt werden muss, und ich dachte, dass Konverter eine gute Möglichkeit ist, dies zu tun. –