Konvertieren von Zeichenfolgen in Floats in einem DataFrame
111
Verdecken einer DataFrame-Spalte mit Zeichenfolgen und NaNWerten in Floats. Und es gibt eine andere Spalte, deren Werte Zeichenfolgen und Gleitkommazahlen sind. So konvertieren Sie diese gesamte Spalte in Floats.
NICHT VERWENDEN convert_objects. Es ist veraltet. Verwenden Sie to_numericoder astypestattdessen
Ted Petrou
Antworten:
72
HINWEIS:pd.convert_objects wurde jetzt veraltet. Sie sollten pd.Series.astype(float)oder pd.to_numericwie in anderen Antworten beschrieben verwenden.
Dies ist in 0.11 verfügbar. Konvertierung erzwingen (oder auf nan setzen) Dies funktioniert auch dann, wenn astypees fehlschlägt. Es ist auch Serie für Serie, so dass es keine vollständige Zeichenfolgenspalte konvertiert
In[10]: df =DataFrame(dict(A =Series(['1.0','1']), B =Series(['1.0','foo'])))In[11]: dfOut[11]:
A B01.01.011 fooIn[12]: df.dtypesOut[12]:
A object
B object
dtype: objectIn[13]: df.convert_objects(convert_numeric=True)Out[13]:
A B01111NaNIn[14]: df.convert_objects(convert_numeric=True).dtypesOut[14]:
A float64
B float64
dtype: object
Bitte beachten Sie, dass dies nicht für Spalten (bei Leadt Multiindex) funktioniert, sondern nur für Werte im Datenrahmen
denfromufa
1
Ich musste set_levels verwenden, um String in float zu konvertieren
denfromufa
16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)Sie können nur eine einzelne Spalte konvertieren.
Jack
19
Dies ist jetzt pd.to_numeric (col) in neueren Versionen
Jeff
11
convert_objects ist in neueren Pandas veraltet. Verwenden Sie die datentypspezifischen Konverter pd.to_numeric.
Thomas Matthew
56
Sie können es versuchen df.column_name = df.column_name.astype(float). Für die NaNWerte müssen Sie angeben, wie sie konvertiert werden sollen, aber Sie können die .fillnaMethode verwenden, um dies zu tun.
Beispiel:
In[12]: dfOut[12]:
a b00.10.21NaN0.320.40.5In[13]: df.a.valuesOut[13]: array(['0.1', nan,'0.4'], dtype=object)In[14]: df.a = df.a.astype(float).fillna(0.0)In[15]: dfOut[15]:
a b00.10.210.00.320.40.5In[16]: df.a.valuesOut[16]: array([0.1,0.,0.4])
In einer neueren Version von Pandas (ab 0.17) können Sie die Funktion to_numeric verwenden. Sie können den gesamten Datenrahmen oder nur einzelne Spalten konvertieren. Außerdem können Sie auswählen, wie Dinge behandelt werden sollen, die nicht in numerische Werte konvertiert werden können:
import pandas as pd
s = pd.Series(['1.0','2',-3])
pd.to_numeric(s)
s = pd.Series(['apple','1.0','2',-3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')
Dies funktioniert nicht beim Konvertieren von einem String in einen Float:ValueError: could not convert string to float: 'date'
Jack
@ Jack kennst du die Problemumgehung hier? Ich habe genau dieses Problem beim Konvertieren von Zeichenfolgen in Float.
Hatt
@Hatt Ich stehe vor dem gleichen Problem. Hast du die Lösung dafür gefunden?
Prakhar Jhudele
@ Jack Ich bin mir nicht sicher, aber Sie scheinen Datumsformat und Float zu verwechseln. # konvertiere in datetime df ['date'] = pd.to_datetime (df ['date'])
Claude COULOMBE
8
Sie müssen leere Zeichenfolgen ('') durch np.nan ersetzen, bevor Sie in float konvertieren. dh:
convert_objects
. Es ist veraltet. Verwenden Sieto_numeric
oderastype
stattdessenAntworten:
Dies ist in 0.11 verfügbar. Konvertierung erzwingen (oder auf nan setzen) Dies funktioniert auch dann, wenn
astype
es fehlschlägt. Es ist auch Serie für Serie, so dass es keine vollständige Zeichenfolgenspalte konvertiertquelle
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)
Sie können nur eine einzelne Spalte konvertieren.Sie können es versuchen
df.column_name = df.column_name.astype(float)
. Für dieNaN
Werte müssen Sie angeben, wie sie konvertiert werden sollen, aber Sie können die.fillna
Methode verwenden, um dies zu tun.Beispiel:
quelle
In einer neueren Version von Pandas (ab 0.17) können Sie die Funktion to_numeric verwenden. Sie können den gesamten Datenrahmen oder nur einzelne Spalten konvertieren. Außerdem können Sie auswählen, wie Dinge behandelt werden sollen, die nicht in numerische Werte konvertiert werden können:
quelle
pd.to_numeric
auf a zu bewerbenDataFrame
, kann mandf.apply(pd.to_numeric)
wie in dieser Antwort ausführlich erklärt verwenden .quelle
ValueError: could not convert string to float: 'date'
Sie müssen leere Zeichenfolgen ('') durch np.nan ersetzen, bevor Sie in float konvertieren. dh:
quelle
Hier ist ein Beispiel
aber wenn dies alles Zeichenfolgenwerte sind ... wie in meinem Fall ... Konvertieren Sie die gewünschten Spalten in Floats:
Ihr Datenrahmen hat jetzt Float-Werte :-)
quelle