熊猫DataFrame子集上的字符串修改

时间:2020-04-15 17:39:37

标签: python regex pandas

我很难更新Pandas数据帧子集中的字符串值

在现场操作中,我可以使用带有以下内容的正则表达式来修改action列:

df['action'] = df.action.str.replace('([^a-z0-9\._]{2,})','')

但是,如果字符串包含特定单词,则我不想对其进行修改,因此我尝试仅更新这样的子集:

df[df['action'].str.contains('TIME')==False]['action'] = df[df['action'].str.contains('TIME')==False].action.str.replace('([^a-z0-9\._]{2,})','')

,还可以像这样使用.loc

df.loc('action',df.action.str.contains('TIME')==False) = df.loc('action',df.action.str.contains('TIME')==False).action.str.replace('([^a-z0-9\._]{2,})','')

,但是在两种情况下,都不会更新。有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以使用loc来做到这一点,但是您首先要使用列,但应该首先使用索引,然后使用[]而不是()

mask_time = ~df['action'].str.contains('TIME') # same as df.action.str.contains('TIME')==False
df.loc[mask_time,'action'] = df.loc[mask_time,'action'].str.replace('([^a-z0-9\._]{2,})','')

示例:

#dummy df
df = pd.DataFrame({'action': ['TIME 1', 'ABC 2']})
print (df)
   action
0  TIME 1
1   ABC 2

使用上述方法后查看结果:

   action
0  TIME 1
1       2

答案 1 :(得分:1)

尝试一下它应该起作用,我发现它here

df.loc[df.action.str.contains('TIME')==False,'action'] = df.action.str.replace('([^a-z0-9\._]{2,})','')