【问题标题】:python code - split a path with special delimiterpython代码 - 用特殊分隔符分割路径
【发布时间】:2021-03-25 11:34:31
【问题描述】:

我们在数据框中有一列,格式为由反斜杠和空格分隔的路径。 我正在尝试将路径分解为构成路径的单个组件(列)。

我尝试使用了不起作用的 os 库!

一种方法是使用这样的 lambda:

df[['level1','level2','level3',...,leveln]] = df.Path.apply(lambda x: pd.Series(str(x).split("\")))

但是这里再次硬编码该行,因为我需要知道路径中有多少级别,并且如果我们想将代码用于不同的场景,每次都识别和硬编码路径级别看起来并不实用#。

【问题讨论】:

  • 你是如何创建数据框的?你可以改用 Pathlib

标签: python pandas lambda path


【解决方案1】:

让我们结合使用 pathlib 和 pandas,假设我们有一个名为 tmp 的目录和 3 个文件。

from pathlib import Path
import pandas as pd 

files = Path('home/umarh/tmp').glob('*')

df = pd.DataFrame({'files' : files})

print(df)

   files
0  /home/umarh/tmp/file1.txt
1  /home/umarh/tmp/file2.txt
2  /home/umarh/tmp/file3.txt

虽然files 看起来像一个字符串,但它实际上是一个Pathlib 对象

df['files'].apply(type)

0    <class 'pathlib.PosixPath'>
1    <class 'pathlib.PosixPath'>
2    <class 'pathlib.PosixPath'>
Name: files, dtype: object

这使得获取parts 变得容易,我将使用字符串的最后两部分以提高可读性,但这将返回一个元组:

df['parts'] = df['files'].apply(lambda x : x.parts[-2:])


   files                                parts
0  /home/umarh/tmp/file1.txt  (tmp, file1.txt)
1  /home/umarh/tmp/file2.txt  (tmp, file2.txt)
2  /home/umarh/tmp/file3.txt  (tmp, file3.txt)

【讨论】:

  • 是的,感谢您的详细解释。由于代码的输入是电子表格,并且需要分解路径列,因此我使用了相同的代码行,但添加了要分解的级别,这使其在其他 spreadhseet 中更加通用和可重用:例如,如果我需要3个首先分解的路径elt df[['level1','level2','level3']] = df.Path.apply(lambda x: pd.Series(str(x).split("\ ",3)) )
  • @Tortuga_C 啊,有道理,你能在帖子中提供你的数据样本吗(不必相同),我将向你展示如何将字符串转换为使用的 pathlib 对象。
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 2019-11-03
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多