2017-11-02 5 views
0

einen Datenrahmen mit df Spalte Betrachten pathSubstring jedes Element der Datenrahmen Python

/home/dir1/myfile1.txt 
/home/anotherDir2/myfile2.txt 
/home/anotherDir3/AnotherMyfile3.txt 

Ich möchte für jede Zeile den Ordner und den Dateinamen Teil aufzuspalten geführt.

Ich weiß, dass

df.path.str.rfind('/')

geben Sie mir den letzten Index der /für die ganze Serie. Ich möchte diesen Index Ergebnis an die jede Zeile einzeln bewerben, aber

df.path.str.slice(0, df.path.str.rfind('/'))

Rückkehr alle NA. Es scheint, dass slice einen einzelnen ganzzahligen Parameter als erwarten und keine Serie.

Wie würde ich das in Python erreichen?

Antwort

0

Dies ist der Datenrahmen, der verwendet wird:

import pandas as pd 

df = pd.DataFrame({'path': ['/home/dir1/myfile1.txt', \ 
          '/home/anotherDir2/myfile2.txt', \ 
          '/home/anotherDir3/AnotherMyfile3.txt']}) 

Sie apply() verwenden können, durch die Reihen der df zu gehen und alles extrahieren, die vor dem letzten '/' ist:

df.path.apply(lambda x: x[0:x.rfind('/')]) 

Welche zurück :

0   /home/dir1 
1 /home/anotherDir2 
2 /home/anotherDir3 
Name: path, dtype: object 

In ähnlicher Weise können Sie tun das gleiche, alles zu extrahieren, die nach dem letzten '/' ist:

df.path.apply(lambda x: x[(x.rfind('/') + 1):len(x)]) 

Welche zurück:

0   myfile1.txt 
1   myfile2.txt 
2 AnotherMyfile3.txt 
Name: path, dtype: object 

Wenn Sie beide, Ordner und die Datei erhalten möchten, können Sie ein verwenden Funktion wie diese, die eine Zeichenfolge von '/' teilt und gibt die letzten zwei Elemente:

def split_path(path): 
    folder_file = path.split('/')[-2:] 
    return(pd.Series({'folder': folder_file[0], 'file': folder_file[1]})) 

Dann können Sie apply() es und fügen Sie die 2 c olumns auf Ihre df:

pd.concat([df, df.path.apply(split_path)], axis=1) 

Welche zurück:

        path    file  folder 
0    /home/dir1/myfile1.txt   myfile1.txt   dir1 
1   /home/anotherDir2/myfile2.txt   myfile2.txt anotherDir2 
2 /home/anotherDir3/AnotherMyfile3.txt AnotherMyfile3.txt anotherDir3 
Verwandte Themen