为什么应用于数据框中的多列不起作用?
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.replace
与 regex=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
我正在尝试删除“$”符号并将值转换为数据框中多列的浮点数。
我有一个看起来像这样的数据框:
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.replace
与 regex=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