熊猫:将列转换为空字符串

2024-05-14 20:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,我收到一个pandas数据帧(比如,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:

Tags: 数据字符串代码trueconvertpandasobjects情况
2条回答
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

更容易使用:

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

“强制”将任何值错误转换为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

相关问题 更多 >

    热门问题