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

如何在Pandas中移除每行列表内长字符串?代码错误排查

问题根源与解决方案

问题出在哪?

你当前的Student列存储的不是真正的Python列表对象,而是格式模仿列表的字符串(比如"[Adam, Kanye, Alice Stocks, Joseph Matthew]")。当你用for x in df['Student']遍历的时候,x是完整的字符串,内层的for y in x会把字符串拆成单个字符逐个遍历,而非按逗号分割的姓名遍历,所以代码才会在字符级别运行。

解决步骤

1. 先把字符串格式的"列表"转成真正的列表

可以用两种方式实现:

  • 方式一(推荐,兼容性更强):用ast.literal_eval解析字符串为列表
import pandas as pd
import ast

# 构造示例数据
df = pd.DataFrame({
    'Class': ['One', 'Two'],
    'Student': ['[Adam, Kanye, Alice Stocks, Joseph Matthew]', '[Justin Bieber, Selena Gomez]']
})

# 转换字符串为列表
df['Student'] = df['Student'].apply(ast.literal_eval)
  • 方式二:纯字符串处理(适合格式规范的场景)
df['Student'] = df['Student'].str.strip('[]').str.split(', ')

2. 筛选长度小于8的姓名

用apply结合列表推导式筛选:

df['Student'] = df['Student'].apply(lambda names: [name for name in names if len(name) < 8])

3. 格式化结果并过滤空行

把筛选后的列表转成逗号分隔的字符串,同时删除没有符合条件姓名的行:

df['Student'] = df['Student'].str.join(', ')
df = df[df['Student'] != ''].reset_index(drop=True)

最终得到的结果就是你想要的:

ClassStudent
OneAdam, Kanye

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:36:31