我有两个数据帧,我想在第一个df的每一行中的特定列中查找值(它们以分号分隔的值存储),然后将其与第二个df的一个特定列中的值进行比较,然后用第二个df中的值替换第一个df中的用分号分隔的值,但仍保持完整的用分号分隔的方式。
我的第一个df称为“活动”,第二个具有要查找的值的df称为“ df_sec”。我将activity['sector-code']
中的分号分隔值与df_sec['dai_sector_2_code']
中的值进行比较。 df_sec在任何列的任何行中都没有用半分号分隔的值,在每个记录的每一列中都没有它的单个值。
这是我到目前为止一直在尝试的事情。
def substitute_dai_sectors(df, df_with_dai_sec):
for i, row in df.iterrows():
if not pd.isna(row['sector-code']):
for each in row['sector-code'].split(';'):
if each:
for _, sec in df_with_dai_sec.iterrows():
if not pd.isnull(sec.dai_sector_2_code) and sec.dai_sector_2_code == each:
df.loc[i, 'dai_sector_0'] = sec['dai_sector_0']
df.loc[i, 'dai_sector_0_code'] = sec['dai_sector_0_code']
df.loc[i, 'dai_sector_1'] = sec['dai_sector_1']
df.loc[i, 'dai_sector_1_code'] = sec['dai_sector_1_code']
df.loc[i, 'dai_sector_2'] = sec['dai_sector_2']
df.loc[i, 'dai_sector_2_code'] = sec['dai_sector_2_code']
df.loc[i, 'dai_sector_3'] = sec['dai_sector_3']
df.loc[i, 'dai_sector_3_code'] = sec['dai_sector_3_code']
return df
from datetime import datetime
st = datetime.now()
tmp_act = substitute_dai_sectors(activity,df_sec)
print(datetime.now()-st)
我知道代码并不是以最佳方式实现的。我还是编程新手。还要花几个小时才能最终弹出错误
AttributeError: 'float' object has no attribute 'split'
我知道两个数据帧都有很多NaN
值,但是我尝试在进入for循环之前检查NaN,但不知何故。
有人可以帮忙吗?