it-swarm.com.de

Konvertieren von Strings in Floats in einem DataFrame

So konvertieren Sie eine DataFrame-Spalte mit Zeichenfolgen und NaN Werten in Gleitkommazahlen. Und es gibt eine weitere Spalte, deren Werte Zeichenfolgen und Gleitkommazahlen sind. Wie konvertiert man diese gesamte Spalte in Floats?.

101
Neer

HINWEIS:pd.convert_objects Ist jetzt veraltet. Sie sollten pd.Series.astype(float) oder pd.to_numeric Verwenden, wie in anderen Antworten beschrieben.

Dies ist in 0.11 verfügbar. Konvertierung erzwingen (oder in nan setzen) Dies funktioniert auch, wenn astype fehlschlägt; Es ist auch Serie für Serie, so dass es keine komplette String-Spalte 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
68
Jeff

Sie können df.column_name = df.column_name.astype(float) versuchen. Für die NaN-Werte müssen Sie angeben, wie sie konvertiert werden sollen. Sie können jedoch die .fillna Methode, um es 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])
46
root

In einer neueren Version von pandas (0.17 und höher) können Sie die Funktion to_numeric verwenden, mit der Sie den gesamten Datenrahmen oder nur einzelne Spalten konvertieren können Sie können auswählen, wie mit Dingen umgegangen werden soll, 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')
43
Salvador Dali
df['MyColumnName'] = df['MyColumnName'].astype('float64') 
28
Claude COULOMBE

sie müssen leere Zeichenfolgen ('') durch np.nan ersetzen, bevor Sie in float konvertieren. dh:

df['a']=df.a.replace('',np.nan).astype(float)
4
Paul Mwaniki

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 das alles Zeichenkettenwerte sind ... wie in meinem Fall ... Konvertiere 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)

Dein Datenframe wird nun Float-Werte haben :-)

1
ArmandduPlessis