You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pythonic方式提取DataFrame字典列表ibans值遇TypeError报错求助

问题解决:提取DataFrame字典列表中的指定字段并处理缺失值

报错原因

  • B.ibans列存在大量缺失值(存储为NaN,属于float类型),迭代时无法遍历float对象,触发TypeError: 'float' object is not iterable。
  • 原代码逻辑错误:wip_r['B.ibans'][d]是完全错误的索引方式,无需引用整个列的元素,应直接遍历当前行的字典列表。

解决方案

方案1:带空值判断的列表推导式

直接在推导式中先判断当前行是否为有效列表,再提取ibans值:

wip_r['banking_country'] = [
    [item['ibans'] for item in lst] if isinstance(lst, list) else []
    for lst in wip_r['B.ibans']
]

若希望缺失值对应结果为NaN而非空列表,可调整为:

import pandas as pd
wip_r['banking_country'] = [
    [item['ibans'] for item in lst] if isinstance(lst, list) else pd.NA
    for lst in wip_r['B.ibans']
]

方案2:Pandas apply 方法(更简洁)

用apply结合自定义函数处理,同时覆盖空值场景:

import pandas as pd

def extract_ibans(lst):
    if isinstance(lst, list):
        return [item['ibans'] for item in lst]
    return pd.NA  # 需求不同可改为返回[]

wip_r['banking_country'] = wip_r['B.ibans'].apply(extract_ibans)

方案3:兼容单个字典的场景

如果B.ibans列中存在单个字典而非列表的情况,可完善判断逻辑:

wip_r['banking_country'] = [
    [item['ibans'] for item in lst] if isinstance(lst, list) 
    else [lst['ibans']] if isinstance(lst, dict) 
    else pd.NA
    for lst in wip_r['B.ibans']
]

测试验证

用包含缺失值的示例数据测试:

data = [
['first_name', 'last_name', 'B.ibans'],
['Charles', 'George', [{"id": "54214312", "bic": "ABC", "ibans": "UK421"}]],
['Alice', 'Smith', pd.NA]  # 模拟缺失值
]
wip_r = pd.DataFrame(data=data[1:], columns=data[0])

应用方案1代码后,结果如下:

first_namelast_nameB.ibansbanking_country
CharlesGeorge[{'id': '54214312', ...}]['UK421']
AliceSmith

内容的提问来源于stack exchange,提问作者Hugoz13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:33:13