用另一个数据框的列(熊猫)替换一个数据框的列中的值

时间:2019-04-23 12:47:17

标签: python pandas dataframe

我有两个数据帧,我想在第一个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,但不知何故。 有人可以帮忙吗?

0 个答案:

没有答案