考虑列df
path
/home/dir1/myfile1.txt
/home/anotherDir2/myfile2.txt
/home/anotherDir3/AnotherMyfile3.txt
我想拆分每行的文件夹和文件名部分。
我知道
df.path.str.rfind('/')
为我提供整个系列的最后一个/
索引。我想将此索引结果分别应用于每一行,但
df.path.str.slice(0, df.path.str.rfind('/'))
返回所有NA
。似乎slice
期望单个整数参数为endposition
而不是系列。
我如何在python中实现这一目标?
答案 0 :(得分:0)
这是使用的数据框:
import pandas as pd
df = pd.DataFrame({'path': ['/home/dir1/myfile1.txt', \
'/home/anotherDir2/myfile2.txt', \
'/home/anotherDir3/AnotherMyfile3.txt']})
您可以使用apply()
浏览df
行,并提取最后'/'
之前的所有内容:
df.path.apply(lambda x: x[0:x.rfind('/')])
返回:
0 /home/dir1
1 /home/anotherDir2
2 /home/anotherDir3
Name: path, dtype: object
类似地,你可以做同样的事情来提取上一个'/'
之后的所有内容:
df.path.apply(lambda x: x[(x.rfind('/') + 1):len(x)])
返回:
0 myfile1.txt
1 myfile2.txt
2 AnotherMyfile3.txt
Name: path, dtype: object
如果你想同时获得文件夹和文件,你可以使用这样的函数将字符串拆分为'/'
并返回最后2个元素:
def split_path(path):
folder_file = path.split('/')[-2:]
return(pd.Series({'folder': folder_file[0], 'file': folder_file[1]}))
然后你可以apply()
并将2列添加到你的df:
pd.concat([df, df.path.apply(split_path)], axis=1)
返回:
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