Pandas:将带有空字符串的列转换为float

时间:2016-02-17 19:18:38

标签: python pandas

在我的应用程序中,我收到一个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_objects或{{1我失踪了。

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

这是与一些示例失败的示例数据的互动:

astype

2 个答案:

答案 0 :(得分:4)

使用以下方法更容易:

  

pandas.to_numeric

     

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

Hotel Jayakarta jaya sangat , Hotel menginap disana selama

'强迫'会将任何值错误转换为import pandas as pd df = pd.DataFrame({'eps': ['1', 1.6, '1.6', 'a', '', 'a1']}) df['eps'] = pd.to_numeric(df['eps'], errors='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

答案 1 :(得分:0)

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