Когда у меня есть pd.DataFrame
с путями, я в конечном итоге делаю много .map(lambda path: Path(path).{method_name}
или apply(axis=1)
, например:
(
pd.DataFrame({'base_dir': ['dir_A', 'dir_B'], 'file_name': ['file_0', 'file_1']})
.assign(full_path=lambda df: df.apply(lambda row: Path(row.base_dir) / row.file_name, axis=1))
)
base_dir file_name full_path
0 dir_A file_0 dir_A/file_0
1 dir_B file_1 dir_B/file_1
Это кажется мне странным, особенно потому что pathlib
делает реализовать /
, чтобы что-то вроде df.base_dir / df.file_name
было бы более pythoni c и естественным.
Я не нашел ни одного типа path
, реализованного в pandas, есть что-то, чего мне не хватает?
РЕДАКТИРОВАТЬ
Я обнаружил, что может быть лучше один раз для всех сделать что-то вроде astype(path)
, то по крайней мере для конкатенации путей с pathlib
это векторизация:
(
pd.DataFrame({'base_dir': ['dir_A', 'dir_B'], 'file_name': ['file_0', 'file_1']})
# this is where I would expect `astype({'base_dir': Path})`
.assign(**{col_name:lambda df: df[col_name].map(Path) for col_name in ["base_dir", "file_name"]})
.assign(full_path=lambda df: df.base_dir / df.file_name)
)