根据匹配子字符串的位置切片pandas列

时间:2016-06-22 16:34:28

标签: python-2.7 pandas

我正在尝试从名为dframe的DataFrame中剪切一个名为PATH的pandas列,这样我就可以在名为AD1position的新列中获取带有扩展名的ad1容器的文件名。

          PATH
0         \
1         \abc.ad1\xaxaxa
2         \defghij.ad1\wbcbcb
3         \tuvwxyz.ad1\ydeded

换句话说,这就是我想看到的内容:

          PATH                       AD1position
0         \
1         \abc.ad1\xaxaxa            abc.ad1
2         \defghij.ad1\wbcbcb        defghij.ad1
3         \tuvwxyz.ad1\ydeded        tuvwxyz.ad1

如果我要在Excel中执行此操作,我会写:

=if(iserror(search(".ad1",[PATH])),"",mid([PATH],2,search(".ad1",[PATH]) + 3))

在Python中,我似乎陷入困境。这是我到目前为止所写的内容:

dframe['AD1position'] = dframe['PATH'].apply(lambda x: x['PATH'].str[1:(x['PATH'].str.find('.ad1')) \
                                     + 3] if x['PATH'].str.find('.ad1') != -1 else "")

执行此操作将返回以下错误:

TypeError: string indices must be integers

我怀疑这个问题是由切片机中的功能引起的,但我很感激任何帮助,想弄清楚如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

这将为您提供拆分的第一个元素。

df['AD1position'] = df.PATH.str.split('\\').str.get(1)

谢谢Root。

答案 1 :(得分:0)

使用.str.extract()功能:

In [17]: df['AD1position'] = df.PATH.str.extract(r'.*?([^\\]*\.ad1)', expand=True)

In [18]: df
Out[18]:
                  PATH  AD1position
0                    \          NaN
1             \aaa\bbb          NaN
2             \byz.ad1      byz.ad1
3      \abc.ad1\xaxaxa      abc.ad1
4  \defghij.ad1\wbcbcb  defghij.ad1
5  \tuvwxyz.ad1\ydeded  tuvwxyz.ad1