如何在Pandas中将DataFrame某列的行值拆分为多列?
解决方案
这里有几种简单可靠的方法可以将列'A'拆分为三个独立数值列:
方法1:正则表达式提取(推荐,适配格式稳定的字符串)
利用str.extract结合正则直接匹配括号内的三个浮点数,一步生成新列:
import pandas as pd # 你的原始数据 a = ['[16.01319488 6.1095932 -0.14837995]', '[16.10400501 6.23724404 -0.1727245 ]', '[16.195107 6.36434895 -0.19695716]', '[16.2864465 6.49178233 -0.22124142]', '[16.37796913 6.62041857 -0.24574078]', '[16.46962054 6.75113206 -0.27061875]', '[16.56134636 6.88479719 -0.29603881]', '[16.65309334 7.02229002 -0.32216479]', '[16.74480491 7.16448166 -0.34915957]', '[16.83642781 7.31224812 -0.37718693]', '[16.92790769 7.46646379 -0.4064104 ]', '[17.0190533 7.62784345 -0.4369622 ]', '[17.10912594 7.79646343 -0.46884957]', '[17.19725 7.97224045 -0.50204846]'] b = [0.0, 0.01999999989745438, 0.03999999979490875, 0.05999999969236312, 0.0799999995898175, 0.09999999948727188, 0.1199999993847262, 0.1399999992821806, 0.159999999179635, 0.1799999990770894, 0.1999999989745438, 0.2199999988719981, 0.2399999987694525, 0.2599999986669069] test = pd.DataFrame({'A':a, 'B':b}) # 提取三个数值并转为浮点型 test[['A1', 'A2', 'A3']] = test['A'].str.extract(r'\[([\d.-]+)\s+([\d.-]+)\s+([\d.-]+)\]', expand=True).astype(float)
这个方法不管数值间的空格数量多少,都能精准提取,且直接生成数值列,适合后续计算。
方法2:字符串分割处理
先去除首尾方括号,再按任意空格分割成列:
# 去掉[]后按空格分割 split_cols = test['A'].str.strip('[]').str.split(r'\s+', expand=True) # 重命名列并合并到原表 split_cols.columns = ['A1', 'A2', 'A3'] test = pd.concat([test, split_cols.astype(float)], axis=1)
步骤直观,适合对字符串操作熟悉的场景,r'\s+'能处理多个连续空格的情况。
方法3:转为列表后展开
利用ast.literal_eval将字符串转为Python列表,再直接展开为列:
import ast # 把字符串转成列表,再转为DataFrame list_cols = test['A'].apply(ast.literal_eval).apply(pd.Series) list_cols.columns = ['A1', 'A2', 'A3'] test = pd.concat([test, list_cols], axis=1)
这个方法适合字符串是标准列表格式的场景,无需手动处理括号和空格,转换后直接就是数值类型。
处理完成后,原DataFrame会保留'B'列,新增'A1'、'A2'、'A3'三个独立数值列。
内容的提问来源于stack exchange,提问作者Cmagelssen
相关产品推荐
相关产品推荐

