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

从DataFrame列中移除包裹字典的方括号

解决DataFrame列中字典被方括号包裹的提取问题

你用str.strip('[]')出现NaN,核心原因是这列元素类型不对——要么是Python列表(非字符串),要么是字符串形式的列表但直接strip没法解析成字典。下面分两种场景给出可行方案:

场景1:列元素是Python列表(每个单元格是长度为1的列表)

如果单元格里是实际的列表对象(比如[{'name': 'Steve', ...}]),直接提取列表的第一个元素即可:

# 方法1:遍历处理空值兼容场景
df['目标列名'] = df['目标列名'].apply(lambda x: x[0] if isinstance(x, list) and len(x) > 0 else x)

# 方法2:pandas内置列表索引操作,更简洁
df['目标列名'] = df['目标列名'].str[0]

这个操作会完整保留字典的嵌套结构(包括country、state这类子字典)。

场景2:列元素是字符串形式的列表

如果单元格里是字符串(比如"[{'name': 'Steve', ...}]"),需要先把字符串解析为Python对象,再提取字典:

import ast
df['目标列名'] = df['目标列名'].apply(lambda x: ast.literal_eval(x)[0] if isinstance(x, str) else x)

这里用ast.literal_eval替代strip,能安全地将字符串转为列表,再取第一个元素得到可用的字典,避免了strip后仍为字符串的问题。

测试示例

用你提供的数据验证场景1:

import pandas as pd
data = {
    'info': [
        [{'name': 'Steve', 'type': 'Candy', 'likes': '2', 'confidence': '0', 
          'country': {'confidence': '0.0', 'abrv': 'STV', 'name': 'USA'}, 
          'region': 'North Amercica', 'subregion': 'Southern Asia', 
          'state': {'confidence': '0.0', 'numer': '0000', 'name': 'Sindh'},
          'class': 'High School'}]
    ]
}
df = pd.DataFrame(data)
df['info'] = df['info'].str[0]
print(df['info'].iloc[0])

输出就是完整的嵌套字典,没有任何信息丢失。

内容的提问来源于stack exchange,提问作者nat-zad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:45:17