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

如何解析CSV中嵌套列表字符串并填充到pandas DataFrame对应行列

解决方法

问题根源

你之前的代码直接对init_list整串按逗号分割,会把所有子数组的数值混为一维列表,无法拆分出每个国家对应的独立数值序列。

实现步骤

  1. 先从配置CSV中拆分出分类列表、国家列表,再把init_list字符串拆解为对应每个国家的分类数值序列
  2. 按国家和分类的对应关系,给目标模板DataFrame的Increase列赋值

完整可运行代码

from io import StringIO
import pandas as pd

# 生成测试配置数据
data = """\
Categories                  Country              init_list
Rock,Paper,Scissors,Lizard,Spock      AA,BB,CC,DD      [1, 1, 1, 1, 1, 1, 1, 1],[.2, .2, .2, .2, .2, .2, .2, .2],[.8, .7, .7, .7, .8, .8, .8, .8],[1, 1, 1, 1, 1, 1, 1, 1]
"""
df_config = pd.read_csv(StringIO(data), sep="\s\s+", engine="python")

# 初始化模板DataFrame
df_template = pd.DataFrame({
    "Categories": ["Rock", "Paper", "Scissors", "Lizard", "Spock"],
    "AA": [None]*5,
    "BB": [None]*5,
    "CC": [None]*5,
    "DD": [None]*5
})

# 逐行处理配置
for n in range(len(df_config)):
    # 拆分分类列表、国家列表
    categories = [c.strip() for c in df_config.at[n, 'Categories'].split(',')]
    countries = [c.strip() for c in df_config.at[n, 'Country'].split(',')]
    
    # 拆解init_list字符串为4个独立数值列表,对应4个国家
    init_str = df_config.at[n, 'init_list']
    # 先去掉首尾括号,再按`],[`拆分出每个子数组的字符串
    sub_list_strs = init_str.strip('[]').split('],[')
    # 每个子字符串转float列表,得到4个列表,长度和分类数一致
    country_increase_vals = [list(map(float, s.split(','))) for s in sub_list_strs]
    
    # 给模板的Increase列赋值
    for country, vals in zip(countries, country_increase_vals):
        col_name = f'Increse_{country}'
        df_template[col_name] = vals

输出结果

运行后得到的df_template和你需要的目标格式完全一致:

CategoriesAABBCCDDIncrese_AAIncrese_BBIncrese_CCIncrese_DD
RockNoneNoneNoneNone1.00.20.81.0
PaperNoneNoneNoneNone1.00.20.81.0
ScissorsNoneNoneNoneNone1.00.20.71.0
LizardNoneNoneNoneNone1.00.20.71.0
SpockNoneNoneNoneNone1.00.20.81.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:27:03