You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas如何快速处理列值:拆分字符串列生成浮点型新列

高效拆分字符串列并生成浮点型子列的方案

嘿,针对你这个需求,我有两个非常高效的pandas处理方案,都是基于向量化操作,比逐行循环或者零散处理快得多,尤其适合数据量较大的场景:

方案一:逐列拆分+批量拼接

这个方法逻辑直观,容易理解,同时保持了向量化的高效性:

import pandas as pd

# 先构造你的示例DataFrame
df1 = pd.DataFrame({
    'eye': ['34_35_a', '35_38_a', '64_43_a'],
    'nose': ['45_66_b', '75_76_b', '85_66_b'],
    'mouse': ['45_64_a', '95_37_a', '65_45_a'],
    'ear': ['78_87_a', '38_79_a', '87_45_a']
})

# 初始化列表存储处理后的列数据
processed_cols = []

for col_name in df1.columns:
    # 按下划线拆分,取前两部分,直接转浮点型
    split_result = df1[col_name].str.split('_', expand=True)[[0, 1]].astype(float)
    # 给拆分后的列重命名为原列名+_x/_y
    split_result.columns = [f"{col_name}_x", f"{col_name}_y"]
    processed_cols.append(split_result)

# 把所有处理后的列横向拼接成最终DataFrame
final_df = pd.concat(processed_cols, axis=1)

方案二:stack/unstack 一键式处理

这个方法更简洁,利用pandas的层级索引特性,避免显式循环,代码更紧凑:

import pandas as pd

df1 = pd.DataFrame({
    'eye': ['34_35_a', '35_38_a', '64_43_a'],
    'nose': ['45_66_b', '75_76_b', '85_66_b'],
    'mouse': ['45_64_a', '95_37_a', '65_45_a'],
    'ear': ['78_87_a', '38_79_a', '87_45_a']
})

final_df = (
    df1.stack()  # 把列转为行层级索引
       .str.split('_', expand=True)  # 拆分字符串
       .iloc[:, :2]  # 只保留前两部分
       .astype(float)  # 转浮点型
       .rename(columns={0: 'x', 1: 'y'})  # 临时命名子列
       .unstack()  # 把层级索引转回列
)

# 把多级列名合并成你需要的格式(比如eye_x、eye_y)
final_df.columns = [f"{col[0]}_{col[1]}" for col in final_df.columns]

这两个方案都能快速得到你想要的结果,而且所有新列的数据类型都是float。相比逐行处理的方法,它们充分利用了pandas的向量化运算优势,在数据量较大时性能提升非常明显。

内容的提问来源于stack exchange,提问作者tktktk0711

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:23:11