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