【问题标题】:Pandas function only works on individual columns but not entire dataframe [duplicate]Pandas 函数仅适用于单个列,但不适用于整个数据框 [重复]
【发布时间】:2022-11-22 22:52:35
【问题描述】:

我有一个如下所示的数据框(给出的示例数据):

df = pd.DataFrame({'smiles': ['CCCCC', 'CCCC1', 'CCCN1'],
                        'ID' : ['A-111', 'A112', 'A-113'],
              'Parameter_1':[30.0, 31.4, 15.9],
              'Parameter_2':[NaN, '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)

当我将它应用于我的整个数据框时,我不断收到以下错误:

df = df.apply(num_parse)

类型错误:无法将系列转换为 <class 'float'>

我不确定为什么,请帮助。

【问题讨论】:

  • 你如何应用它? df.applymap(num_parse) 应该可以
  • 我最初看错了,但添加了我的应用方式 - 我只是使用 df.apply(num_parse) 而不是你建议的方法,它看起来确实有效,非常感谢!
  • 不客气,applymap适用于每个“单元格”,而apply适用于每个“列”,并且您的函数未矢量化(即不能接受系列)

标签: python pandas function


【解决方案1】:

使用applymap()

df.applymap(num_parse)

您还可以:

df.apply(num_parse, axis=1)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多