为什么应用于数据框中的多列不起作用?

How come apply on multiple columns in dataframe does not work?

我正在尝试删除“$”符号并将值转换为数据框中多列的浮点数。

我有一个看起来像这样的数据框:

   policy_status    sum_assured    premium      riders      premium_plus
0        A           1252000 $      1500 $        1.0         1100 $
1        A           1072000 $      2200 $        2.0         1600 $
2        A           1274000 $      1700 $        2.0         1300 $
3        A           1720000 $      2900 $        1.0         1400 $
4        A           1360000 $      1700 $        3.0         1400 $

我有这个功能:

def transform_amount(x):
    x=x.replace('$','')
    x=float(x)
    return x

当我这样做时:

policy[['sum_assured','premium','premium_plus']]=policy[['sum_assured','premium','premium_plus']].apply(transform_amount)

发生以下错误:

TypeError: ("cannot convert the series to <class 'float'>", 'occurred at index sum_assured')

有人知道为什么吗?

如果需要按元素工作,请使用 DataFrame.applymap:

cols = ['sum_assured','policy_premium','rider_premium']
policy[cols]=policy[cols]].applymap(transform_amount)

最好将 DataFrame.replaceregex=True 一起使用,但首先转义 $ 因为特殊的正则表达式值并将列转换为浮点数:

cols = ['sum_assured','premium','premium_plus']
policy[cols]=policy[cols].replace('$','', regex=True).astype(float)
print (policy)
  policy_status  sum_assured  premium  riders  premium_plus
0             A    1252000.0   1500.0     1.0        1100.0
1             A    1072000.0   2200.0     2.0        1600.0
2             A    1274000.0   1700.0     2.0        1300.0
3             A    1720000.0   2900.0     1.0        1400.0
4             A    1360000.0   1700.0     3.0        1400.0