如何在pandas中将对象数据类型转换为浮点数

3

我有一个数据框,其中一列是"object"数据类型。我使用pd.to_numeric()errors='coerce' 将其转换为"float"数据类型。但是,转换后的列中所有条目都显示为NaN。如果我将errors='ignore',则不会将任何条目转换为浮点数。我是否遗漏了什么?以下是代码片段:

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

df['gender'] 包含 'Male' 和 'Female' 条目。我想将它们转换为 'float' 数据类型。
谢谢!
1个回答

2
"to_numeric" 只能将数值化的东西转换。例如,它可以将字符串 '10' 转换为数字 10,但它无法将像 'Male' 这样的东西转换为数字。
请使用 pd.factorize 替代:
df['gender'] = pd.factorize(df['gender'])[0].astype(float)

或者 Series.factorize
df['gender'] = df['gender'].factorize()[0].astype(float)
< p > factorize函数的第一个元素包含整数代码,所以我们将它们转换为astype(float)


或者如你所评论的那样,Series.map 也可以使用:
df['gender'] = df['gender'].map({'Male': 0, 'Female': 1}).astype(float)

1
谢谢!一个快速的评论:这不是与df.gender.replace({'Male': 1, 'Female': 0})相同吗?尽管如此,它运作得很好。 - Nanda
1
对的,map 也可以,只是手动一点。我还解释了为什么 to_numeric 在这里不起作用。 - tdy
1
pd.factorize() 存在一个明显的问题。给定列中的 NaN 条目被转换为“-1”。我尝试包括 "na_sentinel=None",但它没有起作用。在某些应用程序中这样做可能是不利的。也许更好的方法是使用 'map' 方法,其中 NaN 条目被保留,并且可以使用填充/替换方法进行填充/替换。 - Nanda
1
如果存在NaN,则这是一个好的观点。在这种情况下,只有2个类别+ NaN,map是最简单的方法。如果您有大量类别+ NaN,则可以自动进行factorize并链接replace,例如pd.Series(df['gender'].factorize()[0]).replace(-1, np.nan) - tdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接