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

Pandas中将DataFrame字典类型列拆分为多行并提取字段的问题求解

解决方法

错误原因

  • explode仅支持对列表、元组等序列类型的列执行行展开操作,直接对字典类型列调用explode,pandas会将字典识别为可迭代的键集合,后续对字符串类型的链接执行迭代操作,就会出现单个字符拆分为单独行的问题。
  • 将字典转为字符串的操作只会加剧上述问题,字符串迭代的最小单位就是单个字符。
  • 原有lambda函数没有正确提取嵌套字典内的页数、日期字段,逻辑存在缺陷。

完整实现代码

import pandas as pd
import numpy as np

# 处理函数,将嵌套字典转为待展开的列表结构
def process_info(row):
    info_dict = row['Info']
    # 兼容非字典类型的异常值
    if not isinstance(info_dict, dict):
        return []
    res = []
    for pdf_link, detail_info in info_dict.items():
        res.append({
            "PDF Link": pdf_link,
            "Number of Pages": detail_info.get("numberOfPages"),
            "Creation Date": detail_info.get("date")
        })
    return res

# 构造你的测试数据集
data = {'Company URL': {0: 'https://www.eltako.de/', 1: 'https://test.com/'},
 'Potential Client': {0: 1, 1: 0},
 'PDF Link': {0: np.nan, 1: np.nan},
 'Number of Pages': {0: np.nan, 1: np.nan},
 'Creation Date': {0: np.nan, 1: np.nan},
 'Info': {0: {'https://www.eltako.de/wp-content/uploads/2020/11/Eltako_Gesamtkatalog_LowRes.pdf': {'numberOfPages': 440,
    'date': '2017-09-20'}},
         1: {'https://new.com': {'numberOfPages': 230,
    'date': '2017-09-20'}}}}
df = pd.DataFrame(data)

# 执行转换逻辑
df['temp'] = df.apply(process_info, axis=1)
df = df.explode('temp', ignore_index=True)
# 拆分展开后的字段到对应列
df = df.join(pd.json_normalize(df['temp']))
# 清理无用列
df_final = df.drop(['Info', 'temp'], axis=1)

执行后df_final就是你需要的输出结果,原有公共字段(Company URL、Potential Client)会自动复制到拆分后的每一行,不需要单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:06:08