首页 > 解决方案 > 如何在迭代时替换特定的数据框值?

问题描述

我有一个 df,其中第 4 列是犬种,我将其与犬种列表(breeds)进行比较。如果该犬种不在犬种列表中,我想用“NaN”替换数据框中的值。逻辑是有效的,但我无法正确更换。这是怎么做到的?这是我迄今为止一直在尝试的:

for index, row in df_2.iterrows():
    if not any(breed == row[3] for breed in breeds):
        df_2.replace([row[3], 'NaN'], inplace = True)

这个例子提出了例外:ValueError: ('Invalid dtype for pad_1d [category]', 'occurred at index tweet_image_number'). 第 3 列实际上在哪里tweet_image_number,我不确定它为什么会出现在那里。

df的样本:


    tweet_id    jpg_url             tweet_image_number                              breed_probability_1 p1_conf breed_probability_2 p2_conf breed_probability_3 p3_conf
    0   43      666776908487630848  https://pbs.twimg.com/media/CUDeDoWUYAAD-EM.jpg     1   Seat Belt   0.375057    Miniature Pinscher  0.167175    Chihuahua   0.086951
    1   1939    860563773140209665  https://pbs.twimg.com/media/C_FWL0vVwAA13N7.jpg     1   Cardigan    0.583936    Pembroke            0.055979    Beagle      0.045896
    2   1471    779377524342161408  https://pbs.twimg.com/ext_tw_video_thumb/77937...   1   Sundial     0.170921    Cash Machine        0.060359    Maze        0.054981

我对格式感到抱歉,我不知道如何将数据框很好地复制到堆栈中

标签: pythonpandas

解决方案


我需要逃脱第二个循环,这解决了它:

for index, row in df_2.iterrows():
    if not any(breed == row[3] for breed in breeds):
        row[3] = 'NaN'
    df_2.loc[index, 'breed_probability_1'] = row[3]

推荐阅读