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

Pandas函数可单独作用于列但无法作用于整个DataFrame的问题求助

问题分析与解决

问题重现

示例DataFrame代码:

import pandas as pd
import datetime as dt

df = pd.DataFrame({'smiles': ['CCCCC', 'CCCC1', 'CCCN1'],
                        'ID' : ['A-111', 'A112', 'A-113'],
              'Parameter_1':[30.0, 31.4, 15.9],
              'Parameter_2':[pd.NA, '0.644', '4.38E-02'],
              'Date': [dt.date(2021, 1, 1), dt.date(2021, 1, 2), dt.date(2021, 1, 3)]})

自定义数值转换函数:

def num_parse(element):
    try:
        float(element)
        return float(element)
    except ValueError:
        return(element)
    except TypeError:
        return(element)

对单个列应用函数时运行正常:

df['Parameter_1'] = df['Parameter_1'].apply(num_parse)

但对整个DataFrame应用时触发报错:

df = df.apply(num_parse)

报错信息:

TypeError: cannot convert the series to <class 'float'>

报错原因

df.apply()默认按列(axis=0)传递数据,此时传入num_parse的是整列的Series对象,而float()无法直接将Series转为浮点数,因此抛出类型错误。

而Series.apply()是逐元素传递值给函数,所以能正常处理每个单独的元素。

解决方法

要对整个DataFrame的每个元素应用函数,使用df.applymap()方法,它会逐元素遍历整个DataFrame,将每个元素单独传入函数处理:

df = df.applymap(num_parse)

处理后效果:

  • Parameter_2列的'0.644'和'4.38E-02'会被转为浮点数0.644和0.0438
  • smiles、ID列的字符串保持原样
  • Date列的日期对象不受影响
  • 缺失值(NaN/pd.NA)会被保留(因为转换时触发TypeError,函数返回原元素)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:45:46