如何将DataFrame中Percentage列的百分比值转换为小数?
将DataFrame百分比列转换为小数的最优方法
核心方案(矢量化操作,性能最优)
对于格式为#%的百分比列,最高效且简洁的处理方式是利用pandas的矢量化字符串操作,避免逐行循环或apply(这类方法在大数据集下性能极差)。
方法1:基础转换(适用于格式规范的列)
df['Percentage'] = df['Percentage'].str.replace('%', '', regex=False).astype(float) / 100
- 步骤说明:
str.replace('%', '', regex=False):快速移除所有百分号,regex=False关闭正则匹配,提升处理速度astype(float):将字符串转换为浮点型数值/ 100:将百分比数值转换为对应的小数
方法2:稳健转换(兼容缺失值/异常值)
如果列中存在缺失值或非标准格式的内容,推荐使用pd.to_numeric增强容错性:
df['Percentage'] = pd.to_numeric(df['Percentage'].str.replace('%', '', regex=False), errors='coerce') / 100
errors='coerce'会将无法转换的无效值(如非数字字符串)转为NaN,避免程序报错中断
示例演示
import pandas as pd # 构造测试数据 data = {'Percentage': ['80%', '42%', '100%', '5.5%', None, 'invalid']} df = pd.DataFrame(data) # 执行转换 df['Percentage'] = pd.to_numeric(df['Percentage'].str.replace('%', '', regex=False), errors='coerce') / 100 # 输出结果 print(df)
输出:
Percentage 0 0.800 1 0.420 2 1.000 3 0.055 4 NaN 5 NaN
性能说明
上述两种方法均为pandas原生矢量化操作,处理100万行级别的数据集时,速度比apply快10~100倍,是处理此类场景的最优选择。
内容的提问来源于stack exchange,提问作者python noobie
相关产品推荐
相关产品推荐

