Antworten:
HINWEIS:
pd.convert_objects
wurde jetzt veraltet. Sie solltenpd.Series.astype(float)
oderpd.to_numeric
wie in anderen Antworten beschrieben verwenden.
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 konvertiert
In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo'])))
In [11]: df
Out[11]:
A B
0 1.0 1.0
1 1 foo
In [12]: df.dtypes
Out[12]:
A object
B object
dtype: object
In [13]: df.convert_objects(convert_numeric=True)
Out[13]:
A B
0 1 1
1 1 NaN
In [14]: df.convert_objects(convert_numeric=True).dtypes
Out[14]:
A float64
B float64
dtype: object
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 die NaN
Werte müssen Sie angeben, wie sie konvertiert werden sollen, aber Sie können die .fillna
Methode verwenden, um dies zu tun.
Beispiel:
In [12]: df
Out[12]:
a b
0 0.1 0.2
1 NaN 0.3
2 0.4 0.5
In [13]: df.a.values
Out[13]: array(['0.1', nan, '0.4'], dtype=object)
In [14]: df.a = df.a.astype(float).fillna(0.0)
In [15]: df
Out[15]:
a b
0 0.1 0.2
1 0.0 0.3
2 0.4 0.5
In [16]: df.a.values
Out[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')
pd.to_numeric
auf a zu bewerben DataFrame
, kann man df.apply(pd.to_numeric)
wie in dieser Antwort ausführlich erklärt verwenden .
df['MyColumnName'] = df['MyColumnName'].astype('float64')
ValueError: could not convert string to float: 'date'
Sie müssen leere Zeichenfolgen ('') durch np.nan ersetzen, bevor Sie in float konvertieren. dh:
df['a']=df.a.replace('',np.nan).astype(float)
Hier ist ein Beispiel
GHI Temp Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:01:00 -7.99999952505459e-7 18.2 0 NaN
2016-03-15 06:02:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:03:00 -7.99999952505459e-7 18.3 0 NaN
2016-03-15 06:04:00 -7.99999952505459e-7 18.3 0 NaN
aber wenn dies alles Zeichenfolgenwerte sind ... wie in meinem Fall ... Konvertieren Sie die gewünschten Spalten in Floats:
df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)
Ihr Datenrahmen hat jetzt Float-Werte :-)
convert_objects
. Es ist veraltet. Verwenden Sieto_numeric
oderastype
stattdessen