基本上 pandas 对象应用于整个数据框而不是单独的
这就是为什么它会进入 else
条件。我们需要应用到每一行
我在一个行
框架上应用时得到了正确的输出。在应用整个数据帧时,我在每行上都收到错误No key
,基本上res
的某些行有None
,只有那些行预计是没有 key
示例数据框
res,url1,url2
{'bool': True, 'val':False},{'bool': False, 'val':False},{'bool': True, 'val':False}
None,{'bool': True, 'val':False},{'bool': False, 'val':False}
{'bool': False, 'val':False},},{'bool': True, 'val':False},{'bool': True, 'val':False}
代码
def func1():
return ('url1')
def func2():
return ('url2')
def test_func():
if df['res'].str['bool'].all() and df['url1'].str['bool'].all():
return func1()
elif df['res'].str['bool'].all() and df['url2'].str['bool'].all():
return func2()
else:
return ("No Keys")
预期结果
output
url1
No Keys
url2
我的输出
No keys
No Keys
No Kyes
我需要在下面的代码上申请超过5000个网址
df['output'] = df.apply(test_func)
在应用时,我收到错误“每行上没有键”
如果我执行any
,它会传递False
,因为url1
bool 值的第一行是False
问题是,如果 all() 检查所有行,因为第二行中不存在任何行,则其打印 No Keys
最佳答案
重新创建数据框
res url1 \
0 {'bool': True, 'val': False} {'bool': False, 'val': False}
1 None {'bool': True, 'val': False}
2 {'bool': False, 'val': False} {'bool': True, 'val': False}
url2
0 {'bool': True, 'val': False}
1 {'bool': False, 'val': False}
2 {'bool': True, 'val': False}
使用pd.apply
df.apply(lambda x: 'url1' if (x['res'] != None and x['res'].get('bool') and x['url1'].get('bool'))\
else 'url2' if (x['res'] != None and x['res'].get('bool') and x['url2'].get('bool'))
else 'No Keys',1)
Output
0 url2
1 No Keys
2 No Keys
dtype: object
注意 - 对于第三行,res bool 值为 False,因此执行 and
将给出 false,因此 No Keys
关于pandas - All() 每次 else 语句时都会打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470949/