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

如何在含多元素条目的DataFrame中迭代生成对应列表?

解决方法

核心问题是你的DataFrame单元格里存的是字符串,不是真正的列表/数值数组,所以直接调用tolist()会报错(字符串没有这个方法)。需要先把字符串解析成对应类型的列表,处理空值和单个值的情况。

步骤1:编写解析函数

分别处理文本列(Att1)和数值列(Att2):

  • Att1:去掉引号、分割元素,遇到"NA"返回空列表
  • Att2:分割字符串后转成float,单个值也处理成单元素列表
import pandas as pd

def parse_att1(s):
    if s.strip() == "NA":
        return []
    # 清理引号和空格后分割元素
    items = [item.strip().strip('"') for item in s.split(',')]
    return [item for item in items if item]

def parse_att2(s):
    # 分割后转成浮点数值列表
    return [float(item.strip()) for item in s.split(',')]

步骤2:应用函数处理数据

方式一:批量整列处理(更高效)

直接用apply批量解析整列,生成对应列表列:

data = [['"tom-15", "to-13"', '10, 3.3'], ['"nick-12"', '15.5'], ['NA', '14']]
df = pd.DataFrame(data, columns=['Att1', 'Att2'])

# 批量生成列表列
df['Att1_list'] = df['Att1'].apply(parse_att1)
df['Att2_list'] = df['Att2'].apply(parse_att2)

# 查看结果
print(df[['Att1_list', 'Att2_list']])

输出结果:

Att1_list    Att2_list
0  [tom-15, to-13]  [10.0, 3.3]
1        [nick-12]       [15.5]
2                []       [14.0]

方式二:逐行迭代处理(匹配你原有的iterrows需求)

如果必须用iterrows逐行处理,循环内调用解析函数即可:

for idx, row in df.iterrows():
    l1 = parse_att1(row['Att1'])
    l2 = parse_att2(row['Att2'])
    # 此处写入你的后续业务逻辑
    print(f"第{idx}行: l1={l1}, l2={l2}")

输出:

第0行: l1=['tom-15', 'to-13'], l2=[10.0, 3.3]
第1行: l1=['nick-12'], l2=[15.5]
第2行: l1=[], l2=[14.0]

关键说明

  • 原报错原因:row['Att1']取到的是字符串对象,而tolist()是pandas Series或numpy数组的专属方法,字符串没有这个属性。
  • 解析函数已覆盖边界场景:单个值、空值(NA)、分割后残留的空格和引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:17:36