Лучший способ обработать путь с pandas - PullRequest
7 голосов
/ 28 апреля 2020

Когда у меня есть 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)
)
...