我正在使用另一列的值更新列,如果它的值为零
dft = pd.DataFrame(
np.array([
['MAXESSUS', 0], ['BLOOMBERG', 'CORP'], ['BROKER_TEC', 'GOVT'], ['MAXESSUS', 0]
]), columns=['market', 'rbc_security_type1']
)
dft
market rbc_security_type1
0 MAXESSUS 0
1 BLOOMBERG CORP
2 BROKER_TEC GOVT
3 MAXESSUS 0
这是我的功能
dft['rbc_security_type1'].apply(
lambda col_value: col_value['rbc_security_type1'] if col_value['rbc_security_type1'] == 0
else col_value['rbc_security_type1']
)
所需的输出
dft
market rbc_security_type1
0 MAXESSUS MAXESSUS
1 BLOOMBERG CORP
2 BROKER_TEC GOVT
3 MAXESSUS MAXESSUS
我收到此错误: TypeError:字符串索引必须是整数
rbc_security_type1是否包含字符串和整数的问题 需要更改列类型的转换吗?
答案 0 :(得分:1)
我认为需要按字符串0
进行比较,因为数字已转换为字符串,然后使用loc
,numpy.where
或mask
:
#if mixed values - numeric with strings compare by numeric
#mask = dft['rbc_security_type1'] == 0
mask = dft['rbc_security_type1'] == '0'
dft.loc[mask, 'rbc_security_type1'] = dft['market']
dft['rbc_security_type1'] = np.where(mask, dft['market'], dft['rbc_security_type1'])
dft['rbc_security_type1'] = dft['rbc_security_type1'].mask(mask, dft['market'])
print (dft)
market rbc_security_type1
0 MAXESSUS MAXESSUS
1 BLOOMBERG CORP
2 BROKER_TEC GOVT
3 MAXESSUS MAXESSUS
明细:用于检查数字是否为字符串:
print (dft['rbc_security_type1'].apply(type))
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
3 <class 'str'>
Name: rbc_security_type1, dtype: object