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

如何无需遍历行批量转换Pandas DataFrame中带%后缀的数值?

问题:Pandas中无需遍历行的百分比数值转换方法?

原始DataFrame

import pandas as pd

data_dict = {'id': {0: 'G1', 1: 'G2', 2: 'G3'},
 'S': {0: 35.74, 1: 36.84, 2: 38.37},
 'A': {0: 8.34, 1: '2.83%', 2: 10.55},
 'C': {0: '6.63%', 1: '5.29%', 2: 3.6}}
df = pd.DataFrame(data_dict) 

需求

将除id列外,所有带%后缀的数值转换为原数值×10000,最后将这些列统一转为数值类型。

原遍历实现

cols = df.columns[1:]
for index, row in df.loc[:, df.columns != 'id'].iterrows():
    for c in cols:
        if str(row[c]).endswith('%'):
            data_value = str(row[c])
            data_value = data_value.replace('%',"")
            df.at[index,c]= float(data_value) * 10000

# 转换为数值类型
df[cols[1:]] = df[cols[1:]].apply(pd.to_numeric, errors='coerce')

疑问

是否存在无需遍历行的更简便转换方法?


更简便的矢量化实现方法

Pandas的核心优势是矢量化操作,完全可以替代低效的逐行遍历,下面提供两种高效实现:

方法一:矢量化字符串操作 + 条件赋值

import pandas as pd

# 复制原数据避免修改源DataFrame
df_processed = df.copy()
# 定义需要处理的列(排除id)
target_cols = df_processed.columns.drop('id')

for col in target_cols:
    # 筛选出当前列中带%的行
    percent_mask = df_processed[col].astype(str).str.endswith('%')
    # 提取数值、转换类型并乘以10000
    df_processed.loc[percent_mask, col] = (
        df_processed.loc[percent_mask, col]
        .astype(str)
        .str.replace('%', '')
        .astype(float) * 10000
    )

# 统一将目标列转为数值类型
df_processed[target_cols] = df_processed[target_cols].apply(pd.to_numeric, errors='coerce')

方法二:applymap批量处理元素

import pandas as pd

def convert_value(x):
    # 判断是否是带%的字符串
    if isinstance(x, str) and x.endswith('%'):
        return float(x.replace('%', '')) * 10000
    return x

df_processed = df.copy()
target_cols = df_processed.columns.drop('id')

# 对目标列的每个元素应用转换函数
df_processed[target_cols] = df_processed[target_cols].applymap(convert_value)
# 统一转为数值类型
df_processed[target_cols] = df_processed[target_cols].apply(pd.to_numeric, errors='coerce')

优势对比

  • 性能更优:iterrows()逐行处理的效率极低,数据量越大差距越明显;矢量化操作基于numpy底层实现,计算速度提升显著。
  • 代码更简洁:无需嵌套循环,逻辑清晰,后期维护成本更低。
  • 符合Pandas设计理念:批量处理是Pandas的核心能力,矢量化操作能最大化利用其特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:12:40