【问题标题】:How to convert object data type to float in pandas如何在熊猫中将对象数据类型转换为浮点数
【发布时间】:2022-01-26 04:46:19
【问题描述】:

我有一个数据框,其中一列是“对象”数据类型。我使用pd.to_numeric() 和errors = 'coerce' 将其转换为“浮点”数据类型。但是,对于所有条目,转换后的列显示为 NaN。如果我让errors = 'ignore',则所有条目都不会转换为浮点数。有什么我想念的吗?以下是sn-p的代码:

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

df['gender'] 列包含“男性”和“女性”条目。我想将这些转换为“浮点”数据类型。

谢谢!

【问题讨论】:

    标签: python pandas object


    【解决方案1】:

    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)
    

    factorize 的第一个元素包含整数代码,因此我们将它们转换为astype(float)。


    或者正如您评论的那样,Series.map 也可以:

    df['gender'] = df['gender'].map({'Male': 0, 'Female': 1}).astype(float)
    

    【讨论】:

    • 谢谢!一个简短的评论:这与 df.gender.replace({'Male': 1, 'Female': 0}) 不同吗?尽管如此,它工作正常。
    • 是的 map 也可以,只是需要更多手动操作。我还解释了为什么 to_numeric 在这里不起作用。
    • pd.factorize() 有一些明显的地方。给定列中的 NaN 条目将转换为“-1”。我尝试包括“na_sentinel=None”,但没有奏效。这样做在某些应用中可能是不利的。也许最好使用“映射”方法,其中保留 NaN 条目,并且可以使用插补方法填充/替换。
    • 如果有 NaN 就好了。在这种情况下,只有 2 个类别 + NaN,map 将是最简单的。如果您有大量类别 + NaN,您可以自动 factorize 并链接 replace,例如pd.Series(df['gender'].factorize()[0]).replace(-1, np.nan).
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2018-02-13
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多