我正在尝试从名为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
我怀疑这个问题是由切片机中的功能引起的,但我很感激任何帮助,想弄清楚如何解决这个问题。
答案 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