pandas 带有 pathlib 路径过滤的数据框

pandas dataframe with pathlib Path filtering

我正在尝试按其路径和路径项过滤如下所示的数据框:


from pathlib import Path
import pandas as pd

lst = [('100', Path('/root/sub1/nameA.txt'), 'some_type'),
       ('101', Path('/root/sub1/nameB.txt'), 'some_type'),
       ('102', Path('/root/sub2/nameC.txt'), 'other_type')]

df = pd.DataFrame(lst, columns = ['id', 'path', 'category'])
print(df)

目前我正在寻找其父级为 sub1 的所有元素(即目录 sub1 中的所有文件)。 通常我希望能够通过其路径的某些属性来过滤 df。

我知道 Path.parent 属性 并且已经使用了一段时间。我也知道像 df['path'].str.contains() 这样的过滤器选项不适用于 df 条目中的路径对象。

有什么建议吗?感谢您的帮助!

在评论中回答 Manakins 问题 - 示例输出

df[df['path'].apply(Path.parent == '/root/sub1')] # does of course not work!

# desired output
df
      id     path                    category
0     100    '/root/sub1/nameA.txt'  'some_type'
1     101    '/root/sub1/nameB.txt'  'some_type'

如果你想使用 pathlib 对象,那么你必须使用 apply

df[df['path'].apply(lambda x : x.parent == Path('/root/sub1'))]


    id                  path   category
0  100  \root\sub1\nameA.txt  some_type
1  101  \root\sub1\nameB.txt  some_type

您可以将对象转换为字符串,但您会得到一个可能不正确的绝对路径。

在另一个平台上,我被指向具有路径库功能的 pandas-path project, which I want to link here as another approach for anybody who might have the same problem, I had. The project provides a pandas accessor

请注意:我没有尝试或使用过 linked 库,因此无法对其功能或可用性发表评论。我只是将 link 作为“帮助之手”提供给可能想要尝试的任何人。