Pandas If-Else条件判断报错:Series真值歧义问题求助
解决Pandas中的ValueError:Series真值判断模糊问题
需求
分组后的数据中,当「Recordinaciones」字段值大于1时,输出对应的分组数据;当该字段值全部小于等于1时,输出「没有重复记录」(原西班牙语:No hay Recorinaciones Dobles)。
报错原因
代码中if Recoordinaciones > 1:这一行存在问题:Recoordinaciones是Pandas的Series类型,直接与数值比较会生成一个布尔值Series,但Python的if语句无法直接判断整个Series的真值——它无法确定你需要的是所有元素都满足条件还是至少一个元素满足条件,因此抛出ValueError: The truth value of a Series is ambiguous错误。
修复后的代码
import pandas as pd doc = input('输入文件名:') print(f'你输入了:{doc}') df = pd.read_excel(f'{doc}.xlsx') df['Recordinaciones'] = df.apply(lambda _: '', axis=1) df['Cantidad'] = df.apply(lambda _: '', axis=1) # 分组统计并排序 rcs = df[['Cliente','# Externo','Recordinaciones']].groupby(['Cliente','# Externo']).count().reset_index().sort_values(['Recordinaciones'], ascending=False) # 筛选符合条件的行 filtered_rcs = rcs[rcs['Recordinaciones'] > 1] # 判断筛选结果是否为空 if not filtered_rcs.empty: print(filtered_rcs) else: print("没有重复记录")
关键修改说明
- 先通过
rcs[rcs['Recordinaciones'] > 1]筛选出所有满足条件的分组数据,得到一个新的DataFrame - 使用
filtered_rcs.empty判断筛选结果是否为空:- 如果不为空,说明存在符合条件的分组,直接打印筛选结果
- 如果为空,说明所有分组的「Recordinaciones」值都不大于1,打印提示语
内容的提问来源于stack exchange,提问作者Franco Vera
相关产品推荐
相关产品推荐

