首页 > 解决方案 > All() 正在打印每次 else 语句

问题描述

基本上,熊猫对象不是单独应用于整个数据框,这就是它要else调节的原因。我们需要在每一行上应用

我在一row帧上应用时得到了正确的输出。在应用整个数据框时,我No keys在每一行上都遇到了错误,基本上有些行res只有None那些行No keys

样本数据框

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)

应用时出现错误 No keys on each rows

如果我any通过它,False因为布尔值的第一行url1False

问题是如果 all() 它检查所有行,因为 None 存在于第二行中,它的打印No Keys

标签: pandas

解决方案


重新创建数据框

                             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


推荐阅读