Pandas 基于另一列/类型更新dataframe列错误:字符串索引必须为整数
如果一列的值为零,我将用另一列的值更新该列Pandas 基于另一列/类型更新dataframe列错误:字符串索引必须为整数,pandas,dataframe,lambda,types,Pandas,Dataframe,Lambda,Types,如果一列的值为零,我将用另一列的值更新该列 dft = pd.DataFrame( np.array([ ['MAXESSUS', 0], ['BLOOMBERG', 'CORP'], ['BROKER_TEC', 'GOVT'], ['MAXESSUS', 0] ]), columns=['market', 'r
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']
)
期望输出
我得到了这个错误:
TypeError:字符串索引必须是整数
rbc_security_type1既有字符串又有整数,这是一个问题吗
是否需要更改列类型的转换
我认为需要按字符串
0
进行比较,因为numeric已转换为字符串,然后使用loc
,或者:
详细信息:检查数字是否包含字符串:
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
print(dft['rbc\u security\u type1']。应用(类型))
0
1.
2.
3.
名称:rbc\U安全\U类型1,数据类型:对象
#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