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

如何检查Pandas DataFrame列值是否为整数并提取非整数对应项编号

问题背景

现有包含quantity列的pandas DataFrame,需要检查该列中哪些值不属于整数类型,最终输出所有非整数值对应的item_number组成的列表。
最初编写的实现代码如下:

if df['quantity'].map(type) == int:
        True
else:
        item_no = df['item_number'].tolist()
        print(item_no)

运行后抛出错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
错误原因

df['quantity'].map(type) == int的返回结果是长度和原DataFrame一致的布尔型Series,包含每一行的单独判断结果。直接将整个Series放在if条件中做判断时,pandas无法明确你要判断的是「所有值都满足条件」「存在任意值满足条件」还是其他逻辑,因此抛出真值歧义的报错。

正确实现

直接通过布尔索引筛出quantity值类型不为int的行,再提取对应item_number转为列表即可:

# 筛选类型非int的记录,提取对应item编号
non_integer_items = df.loc[df['quantity'].map(type) != int, 'item_number'].tolist()
print(non_integer_items)

如果你的数据中存在整数以浮点型存储的场景(比如3.0、10.0这类实际是整数但类型为float的值),可以调整判断逻辑兼容这类情况:

def check_integer(x):
    # 数值类型判断值是否为整数,非数值类型直接判定为非整数
    if isinstance(x, (int, float)):
        return float(x).is_integer()
    return False

non_integer_items = df.loc[~df['quantity'].map(check_integer), 'item_number'].tolist()
print(non_integer_items)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:06:26