簡體   English   中英

在 DataFrame 中將字符串轉換為浮點數

[英]Converting strings to floats in a DataFrame

如何將包含字符串和NaN值的 DataFrame 列轉換為浮點數。 還有另一列,其值是字符串和浮點數; 如何將整個列轉換為浮點數。

注意: pd.convert_objects現在已被棄用。 您應該使用pd.Series.astype(float)pd.to_numeric ,如其他答案中所述。

這在 0.11 中可用。 強制轉換(或設置為 nan)即使astype失敗,這也會起作用; 它也是逐個系列的,所以它不會轉換說一個完整的字符串列

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.column_name = df.column_name.astype(float) 至於NaN值,您需要指定它們應該如何轉換,但您可以使用.fillna方法來完成。

例子:

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])

在更新版本的 pandas(0.17 及更高版本)中,您可以使用to_numeric函數。 它允許您轉換整個數據框或僅轉換單個列。 它還使您能夠選擇如何處理無法轉換為數值的內容:

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')
df['MyColumnName'] = df['MyColumnName'].astype('float64') 

在轉換為浮點數之前,您必須用 np.nan 替換空字符串 ('')。 IE:

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

這是一個例子

                            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

但如果這是所有字符串值......就像我的情況......將所需的列轉換為浮點數:

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)

您的數據框現在將具有浮點值:-)

導入 pandas 作為 pd

df['a'] = pd.to_numeric(df['a'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM