如何检查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
相关产品推荐
相关产品推荐

