如何将pandas DataFrame列的类列表字符串转为逗号分隔字符串
Pandas字符串列清洗解决方案
你需要处理的是DataFrame中存储为字符串格式的类列表值,移除外层包裹的方括号和多余引号,保留内部元素组成逗号分隔字符串,以下是可直接运行的实现方案:
推荐方案:向量化字符串操作(无安全风险,性能最优)
eval 存在执行任意恶意代码的风险,不需要解析真实列表结构的场景下,直接用pandas内置的字符串处理方法即可完成需求:
# 先移除Column1每个值首尾的外层单引号,再移除首尾的方括号 df['Column1'] = df['Column1'].str.strip("'").str.strip("[]")
处理后Column1的输出和预期完全一致:
0 'jjhjh', 'adads','adsd' 1 'adads','adsd' 2 'jjhjh', 'adads','adsd' 3 'adads','adsd' 4 'adads','adsd' Name: Column1, dtype: object
兼容方案:解析后拼接(适配格式不规整的原始数据)
如果原始字符串存在多余空格、格式不统一的情况,可以先用安全的字面量解析方法转成真实列表,再拼接为目标字符串:
import ast # 先剥离外层单引号,解析为Python列表,再用逗号拼接所有元素 df['Column1'] = df['Column1'].str.strip("'").apply( lambda x: ', '.join(ast.literal_eval(x)) )
原自定义函数的问题说明
- 第一个循环将处理后的值存入
lista后,第二个循环未做逐行对应赋值,每次迭代都会直接覆盖column_name变量,最终只会保留最后一个元素的处理结果 - 类型判断逻辑错误:判断对象是否为元组需要使用
isinstance(m, tuple),直接写m == tuple是将对象与tuple类本身做相等比较,永远返回False - 最终返回
df['other'],和处理Column1列的需求完全不匹配
内容的提问来源于stack exchange,提问作者Natália Resende
相关产品推荐
相关产品推荐

