Pandas如何将DataFrame列内嵌套列表字符串拆分为多个独立列
问题原因
你采用的拆分逻辑存在边界遗漏:用]],作为拆分标记时,最后一个分组[[i,j,k,l]]的结尾只有]]没有后续的逗号,不会被拆分逻辑命中,因此最后一列会残留多余的]]。
解决方法
这里提供两种可直接运行的实现方案:
方案1:先清理边界再拆分
先移除整段字符串首尾的两层方括号,再用分组之间的固定分隔符]],[[拆分,最后给每个结果补外层方括号即可:
# 拆分生成多列 split_df = df['A'].str.strip('[]').str.split(r'\]\],\[\[', expand=True).add_prefix('A') # 为每列内容补全外层方括号 split_df = split_df.apply(lambda col: '[' + col + ']')
方案2:正则提取(更精准)
直接用正则匹配所有符合[x,y,z,w]格式的子串,一步得到目标结果,无需额外处理残留字符:
# 正则匹配所有目标分组,重排为多列 split_df = df['A'].str.extractall(r'(\[[^\]]+\])')[0].unstack().add_prefix('A')
正则规则说明:
\[匹配左方括号,[^\]]+匹配所有非右方括号的连续字符,\]匹配右方括号,可精准捕获每一组你需要的列表格式内容。
两种方案对样例输入"[[a,b,c,d]],[[e,f,g,h]],[[i,j,k,l]]"执行后,都可以得到A1、A2、A3三列,对应值分别为[a,b,c,d]、[e,f,g,h]、[i,j,k,l]。
内容的提问来源于stack exchange,提问作者user13147194
相关产品推荐
相关产品推荐

