Python中if语句如何正确使用any()判断DataFrame行是否满足多条件
错误原因
你代码里的any(coin in xlist['col1'][ii])写法存在两处逻辑错误:
coin是存储条件的列表,xlist['col1'][ii]是单个字符串,coin in xlist['col1'][ii]是尝试判断整个列表是否是字符串的子元素,类型不匹配,因此触发TypeErrorany()需要接收一个由布尔值组成的可迭代对象,你需要先逐个判断每个条件是否满足,再把判断结果传给any()
修正后的遍历写法
把if判断行修改为逐个遍历条件列表判断即可,完整可运行代码如下:
import numpy as np import pandas as pd coin = ['a','b','c'] # conditions xlist = pd.DataFrame() # data xlist['col1'] = np.array(['a','j','k','b','b','d','c','a']) # state xlist['col2'] = np.array([1,2,2,1,2,0,1,3]) for ii in range(len(xlist)): # 逐个判断coin中的元素是否匹配当前行的col1值 if any(c in xlist['col1'][ii] for c in coin): # if state meets a condition, do calculation x print('result 1') else: # if state doesn't meet condition, do calculation y print('result 2')
运行后即可得到你预期的输出。
更推荐的Pandas向量化实现
遍历DataFrame行的效率极低,数据量较大时性能很差,你可以直接用Pandas内置的isin()方法批量判断所有行的匹配状态:
import numpy as np import pandas as pd coin = ['a','b','c'] xlist = pd.DataFrame({ 'col1': ['a','j','k','b','b','d','c','a'], 'col2': [1,2,2,1,2,0,1,3] }) # 批量生成匹配结果 result = np.where(xlist['col1'].isin(coin), 'result 1', 'result 2') # 逐行打印或者直接批量做后续计算 for res in result: print(res)
内容的提问来源于stack exchange,提问作者Medulla Oblongata
相关产品推荐
相关产品推荐

