gpt4 book ai didi

python - 在具有不一致内容的行的数据框列中应用函数

转载 作者:行者123 更新时间:2023-12-01 01:48:00 24 4
gpt4 key购买 nike

我有这个数据框:

      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_passiva”和“parte_ativa”“parte_ativa”从字典中获取“nome”,其中“tipo”为“ATIVA”“parte_passiva”从字典中获取“nome”,其中“tipo”为“PASSIVA”

所以它应该看起来像这样:

                   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_passiva 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 语句来防止这种情况发生?

最佳答案

当它尝试执行x[1]时,会发生错误。并非所有行的长度都是二。 dic_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)

如果'tipo'不存在,我使用x[-1].get('tipo', None)来避免KeyError来自字典,但是 x[-1]['tipo'] 没问题。

关于python - 在具有不一致内容的行的数据框列中应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com