我很难更新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,})','')
,但是在两种情况下,都不会更新。有没有更好的方法来实现这一目标?
答案 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,})','')