我有一个包含用户数据的数据框。有一列包含用户已访问的文件名。文件名看起来像这样:
blah-blah-blah/dss_outline.pdf
doot-doot/helper_doc.pdf
blah-blah-blah/help_file.pdf
我的目标是删掉/之后的所有内容,以便我可以查看人们正在检查的顶级程序(组织下许多不同的文件)。
所以,我面临两个挑战:
1-如何将所有内容“抓取”到“ /”?我一直在寻找正则表达式,但是我很难编写正确的表达式。
2-如何将所有文件名替换为串联的文件名?我发现我可以使用df['Filename'] = df['Filename'].str.split('/')[0]
来抓取适当的部分,但是它不适用于整个系列对象。这就是我想做的逻辑,但是我不知道该怎么做。
谢谢
答案 0 :(得分:1)
您可以使用\/.*$
来匹配不需要的部分并将其删除:DEMO
这会匹配一个正斜杠和所有后续字符,直到字符串结尾(如果您的引擎需要它,请小心使用多行标志!)。
或者您可以使用^[^/]+
匹配所需的部分并将其提取出来:DEMO
这将从字符串开头匹配/
以外的所有连续字符(同样,需要多行!)。
答案 1 :(得分:1)
您有许多方便的解决方案:
split()
方法:>>> df
col1
0 blah-blah-blah/dss_outline.pdf
1 doot-doot/helper_doc.pdf
2 blah-blah-blah/help_file.pdf
>>> df['col1'].str.split('/', 1).str[0].str.strip()
0 blah-blah-blah
1 doot-doot
2 blah-blah-blah
名称:col1,dtype:对象
apply()
+ split()
>>> df['col1'].apply(lambda s: s.split('/')[0])
0 blah-blah-blah
1 doot-doot
2 blah-blah-blah
Name: col1, dtype: object
rsplit()
+ str[0]
剥离所需的内容:>>> df['col1'].str.rsplit('/').str[0]
0 blah-blah-blah
1 doot-doot
2 blah-blah-blah
Name: col1, dtype: object
extract()
中使用熊猫本机正则表达式:>>> df['col1'] = df['col1'].str.extract('([^/]+)')
>>> df
col1
0 blah-blah-blah
1 doot-doot
2 blah-blah-blah
OR
# df.col1.str.extract('([^/]+)')
答案 2 :(得分:0)
使用df.replace
df.replace('\/.*$','',regex=True)
col
0 blah-blah-blah
1 doot-doot
2 blah-blah-blah
答案 3 :(得分:0)
使用ga
:
<╬>
代码:
%s/\%xce//g