You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas报TypeError: bad operand type for unary ~: 'float' 问题咨询

代码实际功能确认

你对代码功能的理解是正确的,这段代码的设计目标是:

  • 对Feature2列做类型转换:仅把纯数字格式的字符串转换为pandas可空整数类型Int64
  • 非数字格式的字符串、空值(np.NaN)保持原有值不变
  • 实现逻辑用到了DataFrame.where方法:满足条件时保留原值,不满足条件时替换为转换后的数值结果

报错原因

报错的直接诱因是Feature2列中的np.NaN值:
df.Feature2.str.isnumeric()是字符串专属方法,遇到非字符串类型的np.NaN时不会返回布尔值,而是返回同样为float类型的NaN,取反运算符~无法对float类型执行操作,因此抛出TypeError。

修复方案

只需给str.isnumeric()方法补充na参数,指定空值的返回结果为布尔值即可,我们指定空值返回False,符合「空值保留原值不转换」的需求:
修改核心逻辑行:
把原来的
~df.Feature2.str.isnumeric()
替换为
~df.Feature2.str.isnumeric(na=False)

修复后完整可运行代码

import pandas as pd
import numpy as np

dummy_data1 = {
    'id': ['1', '2', '3', '4', '5'],
    'Feature1': ['A', 'C', 'E', 'G', 'I'],
    'Feature2': ['Mouse', 'dog', 'house and parrot', '23', np.NaN],
    'dates': ['12/12/2020','12/12/2020','12/12/2020','12/12/2020','12/12/2020']}

df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2', 'dates'])

df1 = df1.assign(
    Feature2=lambda df: df.Feature2.where(
        ~df.Feature2.str.isnumeric(na=False),
        pd.to_numeric(df.Feature2, errors="coerce").astype("Int64"),
    )
)
    
print(df1)

运行输出结果

id Feature1          Feature2       dates
0  1        A             Mouse  12/12/2020
1  2        C               dog  12/12/2020
2  3        E  house and parrot  12/12/2020
3  4        G                23  12/12/2020
4  5        I              <NA>  12/12/2020

可以看到第3行的字符串"23"已经成功转换为Int64类型的23,空值保留为pandas可空类型的,其他字符串值保持不变,符合预期功能。

内容的提问来源于stack exchange,提问作者Srinivas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 07:06:02