在具有不一致内容行的dataframe列中应用函数

2024-09-30 22:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据帧:

      data          
0   [dic_inside_list_1]
1   [dic_inside_list_2]  
...

其中:

dic_inside_list_1 = [{'tipo': 'ATIVA', 'nome': 'GABRIEL FRANCISCO DA CUNHA', 'advogado': False, 'advogados': [{'tipo': 'ADVOGADO_PARTE_ATIVA', 'nome': 'PATRICIA DE SIQUEIRA MANOEL DUARTE', 'advogado': True}]}]

dic_inside_list_2 = [{'tipo': 'ATIVA', 'nome': 'JOSÉ FRANCISCO DE OLIVEIRA', 'advogado': False, 'advogados': [{'tipo': 'ADVOGADO_PARTE_ATIVA', 'nome': 'JULIO TORSO ALCANTARA', 'advogado': True}]}, {'tipo': 'PASSIVA', 'nome': 'INDUSTRIAS MENTEN DE CARTONAGEM LTDA', 'advogado': False, 'advogados': []}]

我想创建两个新列:“parte\u passiva”和“parte\u ativa” “parteèu ativa”是从把“tipo”作为“ativa”的字典中得到的“nome” “parteèu passiona”是从把“tipo”作为“passiona”的字典中得到的“nome”

所以应该是这样的:

                   data                    parte_ativa             parte_passiva
0   [dic_inside_list_1]   'GABRIEL FRANCISCO DA CUNHA'     
1   [dic_inside_list_2]   'JOSÉ FRANCISCO DE OLIVEIRA'    'INDUSTRIAS MENTEN DE CARTONAGEM LTDA'
...

以下代码适用于“parte\\ ativa”,因为这两个词典中都有:

df['parte_ativa']=df['data'].apply(lambda x: x[0]['nome'] if x[0]['tipo']=='ATIVA' else x)

但是,当我尝试将其应用于parte\u passivia df['parte_passiva']=df['data'].apply(lambda x: x[1]['nome'] if x[1]['tipo']=='PASSIVA' else x)时,会产生一个错误,因为并非所有行都有'tipo' == 'PASSIVA'

IndexError: list index out of range

有人对此有什么建议吗? 我知道不可能在lambda里面放一个try语句。有没有办法用if语句来防止这种情况发生


Tags: falsedfdatadelistinsidenomedic
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:47

您的错误发生在它尝试执行x[1]时。不是所有行的长度都是2dic_inside_list_2[1]给出IndexError

如果您的数据是长度为1或2(仅)的列表,并且您仅在x[1]处检查'tipo'=='PASSIVA',则可以使用:

df['parte_passiva']=df['data'].apply(
    lambda x: x[-1]['nome'] if x[-1].get('tipo', None)=='PASSIVA' else None)

如果您的数据是长度可变的列表,但仍然只在x[1]处检查'tipo'=='PASSIVA',则可以使用:

df['parte_passiva']=df['data'].apply(
    lambda x: x[min(len(x)-1,1)]['nome'] if x[min(len(x)-1,1)].get('tipo', None)=='PASSIVA' else None)

我使用x[-1].get('tipo', None)来避免KeyError如果'tipo'没有出现在字典中,但是x[-1]['tipo']就可以了

相关问题 更多 >