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_passiva”和“parte_ativa”“parte_ativa”正在从具有“tipo”的字典中获取“nome”,因为“ATIVA”“parte_passiva”正在从具有“tipo”的字典中获取“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_passivadf['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]
。并非所有行的长度都是 2。dic_inside_list_2[1]
给出IndexError
.
如果您的数据是长度为 1 或 2(仅)的列表,并且您'tipo'=='PASSIVA'
仅在 处检查x[1]
,则可以使用:
df['parte_passiva']=df['data'].apply(
lambda x: x[-1]['nome'] if x[-1].get('tipo', None)=='PASSIVA' else None)
如果您的数据是可变长度的列表,但您仍然'tipo'=='PASSIVA'
只检查 at x[1]
,您可以使用:
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
if 'tipo'
,但x[-1]['tipo']
很好。
推荐阅读
- android - 将图像保存在外部存储中适用于模拟器,但不适用于具有相同源代码的物理手机
- spring-cloud - spring-cloud-gateway webflux ProxyExchange 返回 404
- mvvm - ReactiveUI 和 DynamicData SourceCache 更新问题
- angular - 为什么我收到一条错误消息:错误 TS2339:“AbstractControl”类型上不存在属性“控件”
- c# - 如何通过获取 ID 显示姓名?
- botframework - 如何从我的 v4 机器人返回打字活动
- c++ - 在 C++ 中读取文本文件时遇到错误
- c++ - 两个 static_cast 比 reinterpret_cast 好吗?
- c - 您可以在 C 中将变量声明为 main 中的结构吗?
- javascript - 为什么当高度设置为 0% 时条不会消失