我的pandas数据框列center
如下所示:
In [6]: df.center.head()
Out[6]:
0 /Users/sachin/uniwork/IMG/center_2017_09_17_20...
1 /Users/sachin/uniwork/IMG/center_2017_09_17_20...
2 /Users/sachin/uniwork/IMG/center_2017_09_17_20...
3 /Users/sachin/uniwork/IMG/center_2017_09_17_20...
4 /Users/sachin/uniwork/IMG/center_2017_09_17_20...
Name: center, dtype: object
我希望摆脱IMG
之前的所有垃圾。但是,当我执行以下字符串替换时,它会在IMG文件夹之前和之后替换IMG周围的所有。
In [7]: df.head().center.str.replace(r'[^IMG]+?','')
Out[7]:
0 IMG
1 IMG
2 IMG
3 IMG
4 IMG
Name: center, dtype: object
我认为放?
会阻止它在第一次出现IMG之后进行搜索,但这肯定不是上面所见的情况。
执行上述正则表达式的正确方法是什么?
答案 0 :(得分:3)
另一种借助拆分的方法虽然我更喜欢正则表达式,即
df.center.apply(lambda x : '/IMG'+x.split('IMG')[-1])
输出:
0 /IMG/center_2017_09_17_20... 1 /IMG/center_2017_09_17_20... 2 /IMG/center_2017_09_17_20... 3 /IMG/center_2017_09_17_20... 4 /IMG/center_2017_09_17_20... Name: center, dtype: object
或者感谢@Zero
'/IMG' + df.center.str.rsplit('/IMG', 1).str[1]
答案 1 :(得分:2)
使用'.*(?=IMG/)'
- 匹配字符串中最后一个IMG/
之前的所有内容。
In [3165]: df.center.str.replace('.*(?=IMG/)', '')
Out[3165]:
0 IMG/center_2017_09_17_20...
1 IMG/center_2017_09_17_20...
2 IMG/center_2017_09_17_20...
3 IMG/center_2017_09_17_20...
4 IMG/center_2017_09_17_20...
Name: center, dtype: object
.*
- 匹配一切
(?=IMG/)
- 在您遇到模式IMG/
之前,捕获忽略模式的群组,IMG
。稍后更换捕获的组。