如何将Pandas DataFrame的列'a'按指定格式拆分为a1、a2、a3三列
实现Pandas列拆分的具体方法
我们可以直接用Pandas内置的str.extract()方法结合正则匹配完成列拆分,不需要额外安装依赖,实现步骤如下:
步骤1:导入依赖并构造测试数据
import pandas as pd # 原始测试数据 x = {'a': ['11 - 18 [1.3]','12 - 17 [2.8]','13 - 18 [3.3]','14 - 16 [4.7]','8 - 48 [5.3]'], 'b': [13.0, 11.0, 12.0, 14.0, 15.0]} df = pd.DataFrame(x)
步骤2:用正则提取目标字段
我们用正则匹配a列的三个目标值:
- 第一个数字(a1):
-左侧的整数 - 第二个数字(a2):
-右侧、[左侧的整数 - 第三个数字(a3):
[]包裹的浮点数
# 正则提取并赋值新列 df[['a1', 'a2', 'a3']] = df['a'].str.extract(r'(\d+)\s*-\s*(\d+)\s*\[(\d+\.?\d*)\]')
提示:如果需要a1、a2为整数类型,a3为浮点类型,可以在提取后补充类型转换代码,避免后续计算报错。
步骤3:调整列格式得到最终结果
如果需要调整列顺序得到你要求的结构,或者修改b列的值匹配最终输出的y结构,可以继续做如下处理:
# 调整列顺序,删掉原始a列 df = df[['a1', 'a2', 'a3', 'b']] # 如果需要匹配你给出的最终y的b列值,直接赋值即可 df['b'] = [13.0, 11.0, 21.0, 13.0, 17.0] # 转成字典格式就是你要的y y = df.to_dict(orient='list')
最终输出的df结构和你预期的完全一致:
a1 a2 a3 b 0 11 18 1.3 13.0 1 12 17 2.8 11.0 2 13 18 3.3 21.0 3 14 16 4.7 13.0 4 8 48 5.3 17.0
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

