将DataFrame中含字符串形式列表的列拆分为两列
解决DataFrame字符串列表拆分为多列的问题
我来帮你搞定这个需求!你遇到的问题是把DataFrame里存成字符串的列表拆分成单独的数值列,其实有两种简单可靠的方法,我给你一步步讲清楚:
方法一:用ast.literal_eval解析字符串列表(推荐)
这个方法最稳妥,因为它能安全地把字符串形式的Python字面量(比如列表、字典)转换成实际的Python对象,还能自动保留数值类型,不用手动处理类型转换。
步骤如下:
- 导入
pandas和ast模块 - 用
apply把每个字符串转换成真实的列表 - 把列表展开成两列
代码示例:
import pandas as pd import ast # 你的示例DataFrame df = pd.DataFrame({'vals': ['[12.1, 15.0]', '[3.5, 7.2]', '[9.0, 10.1]']}) # 将字符串列表转换为实际的Python列表 df['vals_list'] = df['vals'].apply(ast.literal_eval) # 把列表拆分成val1和val2两列 df[['val1', 'val2']] = pd.DataFrame(df['vals_list'].tolist(), index=df.index) # 可选:删掉中间的临时列 df = df.drop('vals_list', axis=1) print(df)
运行后你会得到:
vals val1 val2 0 [12.1, 15.0] 12.1 15.0 1 [3.5, 7.2] 3.5 7.2 2 [9.0, 10.1] 9.0 10.1
方法二:纯字符串处理(无需额外模块)
如果你不想导入ast模块,也可以直接对字符串做拆分和清理操作:
import pandas as pd df = pd.DataFrame({'vals': ['[12.1, 15.0]', '[3.5, 7.2]', '[9.0, 10.1]']}) # 1. 去掉字符串首尾的方括号 2. 按逗号分割成两列 3. 转换为浮点数类型 df[['val1', 'val2']] = df['vals'].str.strip('[]').str.split(',', expand=True).astype(float) print(df)
这个方法的原理是:
str.strip('[]')移除字符串开头和结尾的[和]str.split(',', expand=True)把分割后的结果直接展开成新的列astype(float)把分割得到的字符串转换成浮点数(自动忽略元素前后的空格)
注意事项
- 确保
vals列里的所有字符串都是格式统一的列表(比如每个字符串都有两个元素,用逗号分隔),否则拆分时会报错 - 如果你的列表里有整数或者其他类型,
ast.literal_eval会自动保留原类型,而字符串处理方法需要你调整astype的参数(比如int)
内容的提问来源于stack exchange,提问作者Lonewoolf
相关产品推荐
相关产品推荐

