簡體   English   中英

Pandas:將帶有空字符串的列轉換為float

[英]Pandas: convert column with empty strings to float

在我的應用程序中,我收到一個pandas DataFrame(比如, block ),它有一個名為est的列。 此列可以包含字符串或浮點的混合。 我需要將列中的所有值轉換為浮點數,並使列類型為float64 我這樣做使用以下代碼:

block[est].convert_objects(convert_numeric=True)
block[est].astype('float')

這適用於大多數情況。 但是,在一種情況下, est包含所有空字符串。 在這種情況下,第一個語句執行時沒有錯誤,但列中的空字符串仍為空字符串。 然后第二個語句會導致錯誤: ValueError: could not convert string to float: .

如何修改我的代碼以處理包含所有空字符串的列?

編輯 :我知道我可以block[est].replace("", np.NaN) ,但我想知道是否有某種方法可以使用convert_objectsastype來做到這一點。

澄清 :出於項目原因,我需要使用pandas 0.16.2。

這是與一些演示失敗的示例數據的交互:

>>> block = pd.DataFrame({"eps":["", ""]})
>>> block = block.convert_objects(convert_numeric=True)
>>> block["eps"]
0
1
Name: eps, dtype: object
>>> block["eps"].astype('float')
...
ValueError: could not convert string to float:

使用以下方法更容易:

pandas.to_numeric

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.to_numeric.html

import pandas as pd
df = pd.DataFrame({'eps': ['1', 1.6, '1.6', 'a', '', 'a1']})

df['eps'] = pd.to_numeric(df['eps'], errors='coerce')

'coerce'會將任何值錯誤轉換為NaN

df['eps'].astype('float')
0    1.0
1    1.6
2    1.6
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64

然后您可以應用其他功能而不會出現錯誤:

df['eps'].round()
0    1.0
1    2.0
2    2.0
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64
def convert_float(val):
    try:
        return float(val)
    except ValueError:
        return np.nan

df = pd.DataFrame({'eps': ['1', 1.6, '1.6', 'a', '', 'a1']})
>>> df.eps.apply(lambda x: convert_float(x))
0    1.0
1    1.6
2    1.6
3    NaN
4    NaN
5    NaN
Name: eps, dtype: float64

暫無
暫無

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

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