如何替换包含在多个列的列表中的值

2024-09-29 20:16:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下建议:

                      Q4_1                Q4_2            Q4_3        Q4_4  \
130              far cry 4                 NaN             NaN         NaN   
131       grand theft auto     Assassins Creed    call of duty  watch dogs   
132    the elder scrolls v       the witcher 3      dragon age  dark souls   
133              Uncharted        Call of duty        Deadpool     Far cry   
134  Monster Hunter: World  Kingdom Hearts III  Darksiders III         NaN   
135              Fallout 4                 NaN             NaN         NaN   

                 Q4_5         Q4_6       Q4_7 Q4_8 Q4_9 Q4_10  
130               NaN          NaN        NaN  NaN  NaN   NaN  
131               NaN          NaN        NaN  NaN  NaN   NaN  
132           fallout  assassins creed  fallout 3  NaN  NaN   NaN  
133  Grand theft auto          NaN        NaN  NaN  NaN   NaN  
134               NaN          NaN        NaN  NaN  NaN   NaN  
135               NaN          NaN        NaN  NaN  NaN   NaN  

我想用基于列表的唯一标识字符串替换类似字符串。因此,这将是期望的输出:

                      Q4_1                Q4_2            Q4_3        Q4_4  \
130              far cry 4                 NaN             NaN         NaN   
131       grand theft auto     Assassin's Creed    call of duty  watch dogs   
132    the elder scrolls v       the witcher 3      dragon age  dark souls   
133              Uncharted        Call of duty        Deadpool     Far cry   
134  Monster Hunter: World  Kingdom Hearts III  Darksiders III         NaN   
135              Fallout 4                 NaN             NaN         NaN   

                 Q4_5         Q4_6       Q4_7 Q4_8 Q4_9 Q4_10  
130               NaN          NaN        NaN  NaN  NaN   NaN  
131               NaN          NaN        NaN  NaN  NaN   NaN  
132           fallout  Assassin's Creed  fallout 3  NaN  NaN   NaN  
133  Grand theft auto          NaN        NaN  NaN  NaN   NaN  
134               NaN          NaN        NaN  NaN  NaN   NaN  
135               NaN          NaN        NaN  NaN  NaN   NaN  

所以我已经得到了一组可以找到的值:

list_assasins_creed = ['Assasin\'s Creed', 'Assassin\'s Creed', 'Assassins Creed', 'assasins creed', 'assassin\'s creed', 'assassins creed']

此值可以在多列中找到(Q4_1..Q4_9)

我想用《刺客信条》取代那些价值观。 我尝试使用loc:

df_survey_Q4.loc[df_survey_Q4[['Q4_1', 'Q4_2', 'Q4_3', 'Q4_4', 'Q4_5', 'Q4_6', 'Q4_7', 'Q4_8','Q4_9', 'Q4_10']].isin(list_assasins_creed),['Q4_1', 'Q4_2', 'Q4_3', 'Q4_4', 'Q4_5', 'Q4_6', 'Q4_7', 'Q4_8','Q4_9', 'Q4_10']] = 'Assassin\'s Creed'

但我有一个错误:

KeyError: "None of [Index([     ('Q', '4', '_', '1'),      ('Q', '4', '_', '2'),\n            ('Q', '4', '_', '3'),      ('Q', '4', '_', '4'),\n            ('Q', '4', '_', '5'),      ('Q', '4', '_', '6'),\n            ('Q', '4', '_', '7'),      ('Q', '4', '_', '8'),\n            ('Q', '4', '_', '9'), ('Q', '4', '_', '1', '0')],\n      dtype='object')] are in the [index]"

你知道我该怎么做吗


Tags: oftheautonaniiidutyfartheft
2条回答

您可以编写这样的代码

df.replace( ['Assasin\'s Creed', 'Assassin\'s Creed', 'Assassins Creed',
             'assasins creed', 'assassin\'s creed', 'assassins creed'] , 'assasian' ) 

您可以这样做:

df = df.replace({word: "Assassin's Creed" for word in list_assasins_creed}, regex=True)
print(df)

df = df.replace(list_assasins_creed, 'Assassin\'s Creed')
print(df)

                    Q4_1              Q4_2            Q4_3        Q4_4
0              far cry 4               NaN             NaN         NaN
1       grand theft auto  Assassin's Creed    call of duty  watch dogs
2    the elder scrolls v     the witcher 3      dragon age  dark souls
3              Uncharted      Call of duty        Deadpool     Far cry
4  Monster Hunter: World  Assassin's Creed  Darksiders III         NaN
5              Fallout 4               NaN             NaN         NaN

相关问题 更多 >

    热门问题