如何在数据框列中的字符后删除字符串的其余部分?

时间:2019-01-29 09:24:43

标签: python regex pandas

我有一个包含用户数据的数据框。有一列包含用户已访问的文件名。文件名看起来像这样:

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]来抓取适当的部分,但是它不适用于整个系列对象。这就是我想做的逻辑,但是我不知道该怎么做。

谢谢

4 个答案:

答案 0 :(得分:1)

您可以使用\/.*$来匹配不需要的部分并将其删除:DEMO
这会匹配一个正斜杠和所有后续字符,直到字符串结尾(如果您的引擎需要它,请小心使用多行标志!)。

或者您可以使用^[^/]+匹配所需的部分并将其提取出来:DEMO
这将从字符串开头匹配/以外的所有连续字符(同样,需要多行!)。

答案 1 :(得分: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:对象

2)您可以使用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

3)您可以使用rsplit() + str[0]剥离所需的内容:

>>> df['col1'].str.rsplit('/').str[0]
0    blah-blah-blah
1         doot-doot
2    blah-blah-blah
Name: col1, dtype: object

4)您可以在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