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でこれを行うにした場合は、私が書くでしょう:Pythonで
=if(iserror(search(".ad1",[PATH])),"",mid([PATH],2,search(".ad1",[PATH]) + 3))
を、私はように見えます立ち往生する。ここで私はこれまでに書いたものです。これを行う
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
私は問題はスライサーで機能によって生じていると思われるが、私は持つ任意の助けをいただければと思いますこれを解決する方法を考え出す。
これは最高の答えでした。私はパンダをv.18.1にアップデートして、expand引数を使用できると答えました。あなたの関数が "\ aaa \ axy.ad1 \ bbbbb"というPATHの可能性をカバーしているように見えますが、 "\ byz.ad1"のような値を扱うかどうかはわかりません。 )または "\ def.ad1.ad1 \ ccccc"(つまり、ファイル名の拡張子を繰り返します)が、私はここからうまくいくはずです。 – Xavier
@Xavier、あなたは正しいです - 私は私の答えを訂正しました、確認してください – MaxU