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

如何对字典中的DataFrame应用自定义函数完成百分比列转浮点型

现有代码的问题

  • 没有对apply的返回值赋值:Pandas中绝大多数操作默认返回新对象而非修改原数据,你调用data[key].apply(...)后没有把结果赋值回原位置,所以原DataFrame没有任何变化。
  • 函数内的判断逻辑错误:if '%' in x中的x是整列Series,in操作符对Series判断的是「索引是否包含该值」而非「元素内容是否包含该字符」,逻辑完全不成立。
  • 未限定处理的指定列:你当前是对DataFrame所有列执行转换,会导致不需要处理的文本列也被传入函数,和你「仅转换指定列」的需求不符。

最简实现方案

你不需要单独写转换函数,直接用str.replace配合pd.to_numeric即可实现兼容带%/不带%的字符串转浮点的需求,示例代码如下:

import pandas as pd

data = {'dataframe_1':pd.DataFrame({'col1': ['John', 'Ashley'], 'col2': ['+10', '-1']}), 'dataframe_2':pd.DataFrame({'col3': ['Italy', 'Brazil', 'Japan'], 'col4': ['Milan', 'Rio do Jaineiro', 'Tokio'], 'percentage':['95%', '0%', '80%']})}

# 定义每个DataFrame需要转换的列,可根据实际需求修改
target_cols = {
    'dataframe_1': ['col2'],
    'dataframe_2': ['percentage']
}

for df_name, cols in target_cols.items():
    df = data[df_name]
    for col in cols:
        # 先判断该列是否包含%符号
        has_percent = df[col].str.contains('%', na=False).any()
        # 去掉%符号后转浮点
        df[col] = pd.to_numeric(df[col].str.replace('%', '', regex=False), errors='coerce')
        # 包含%的列数值自动除以100
        if has_percent:
            df[col] = df[col] / 100
    data[df_name] = df

执行后data['dataframe_2']的输出如下,完全符合预期:

col3            col4  percentage
0   Italy           Milan        0.95
1  Brazil  Rio do Jaineiro        0.00
2   Japan           Tokio        0.80

如果不需要自动区分是否要除以100,仅需要把指定列的%去掉转浮点,删除has_percent相关的判断分支即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:15:01