当我在Pandas中尝试locale.atof时,float“object”没有属性“replace”是什么?

2024-04-28 05:50:25 发布

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

我正在尝试将Pandas数据帧序列转换为float。我会locale.setlocale(locale.LC_NUMERIC, '')然后df.idh.apply(locale.atof),但它给了我上述的错误:AttributeError: 'float' object has no attribute 'replace'。我想在某个点上,它得到了一个像NaN,或者其他的字符串,但它没有识别出来。我该如何告诉apply跳过这些?


Tags: 数据pandasdf错误序列floatlocaleattributeerror
3条回答

这个替代方案对你有用吗?

csv_nn = df.replace(np.nan, 'null', regex=True)

这个问题与空值有关。Replace不能处理numpy空值。您的解决方案不会返回错误,因为您将np.NaN(nulls)转换为“NaN”,而replace可以处理字符串“NaN”。但问题是你的专栏里现在有了“nan”,而不是np.nan。所以如果你跑:

df[df.idh.isnull()]

即使数据中有空值,它也将返回0行。以下代码在对该列运行replace语句时保留np.NaN。

def replace_percent(x):
    try: 
        return x.replace('%', '')
    except AttributeError:
        return np.NaN

df_not.secularism = df_not.secularism.map(replace_percent)

嗯,我不知道这有多“聪明”,但我是这样“修理”的,至少目前是这样的:

df.idh = df.idh.astype(str).apply(locale.atof)

拜托,一定要让我知道这个聪明的答案。

相关问题 更多 >