熊猫 rsplit 与 if 包含

Posted

技术标签:

【中文标题】熊猫 rsplit 与 if 包含【英文标题】:Pandas rsplit with if contains 【发布时间】:2022-01-10 18:56:08 【问题描述】:

使用 python 与 if contains(r'/' and r'\') 和 rsplit(str,1) 我可以 将值分开。但是使用 Pandas 是行不通的。 如何使用 pandas 获得此结果?

"PATH_IN","PATH_OUT"
"C:\USER\ARON\TESTE.TXT","C:\OUT\TESTE.TXT"
"SOUP.TXT","SOUP.TXT"
"/OPT/IN/TESTE.TXT","TESTE.TXT"

结果

"PATH_IN","NAME_IN","PATH_OUT","NAME_OUT"
"C:\USER\ARON","TESTE.TXT","C:\OUT","TESTE.TXT"
"","SOUP.TXT","","SOUP.TXT"
"/OPT/IN/","TESTE.TXT","","TESTE.TXT"

【问题讨论】:

请将数据框示例添加到问题中。 我添加数据框 【参考方案1】:

试试这个:

df['NAME_IN'] = df['PATH_IN'].str.split(r'[/\\]').str[-1]
df['NAME_OUT'] = df['PATH_OUT'].str.split(r'[/\\]').str[-1]

输出:

>>> df
                  PATH_IN          PATH_OUT    NAME_IN   NAME_OUT
0  C:\USER\ARON\TESTE.TXT  C:\OUT\TESTE.TXT  TESTE.TXT  TESTE.TXT
1                SOUP.TXT          SOUP.TXT   SOUP.TXT   SOUP.TXT
2       /OPT/IN/TESTE.TXT         TESTE.TXT  TESTE.TXT  TESTE.TXT

【讨论】:

我需要结果是唯一的。在路径中只有路径和文件名只有文件名。【参考方案2】:

一种方法是避免正则表达式并使用os.path.split,因为它可以处理文件名的多个分隔符。

df[["PATH_IN", "NAME_IN"]] = df["PATH_IN"].apply(lambda x: pd.Series(os.path.split(x)))
df[["PATH_OUT", "NAME_OUT"]] = df["PATH_OUT"].apply(lambda x: pd.Series(os.path.split(x)))

输出:

        PATH_IN PATH_OUT    NAME_IN   NAME_OUT
0  C:\USER\ARON   C:\OUT  TESTE.TXT  TESTE.TXT
1                          SOUP.TXT   SOUP.TXT
2       /OPT/IN           TESTE.TXT  TESTE.TXT

【讨论】:

使用 lib os 会有操作系统或 python 版本的问题吗? 不太可能。 os.path.split 专门设计为不会在多个平台上遇到str.split 可能遇到的问题。如果路径仅是基本名称(例如soup.txt),它也会处理。 我将代码与表达式一起使用,但它引发了异常。 TypeError: 预期的 str、字节或 os.PathLike 对象,而不是浮动 感觉就像有一个空单元格因此np.nan。在应用代码之前使用df = df.fillna("") 1st 非常感谢您的帮助!可以,但是处理时间很长,大约4分钟。有没有可能改进?

以上是关于熊猫 rsplit 与 if 包含的主要内容,如果未能解决你的问题,请参考以下文章

一个接一个地循环数据帧(熊猫)

从另一个数据框中删除包含相同日期的行-python-大熊猫

如何将每行列表中的元素与熊猫匹配

如何过滤或删除包含熊猫列表中值的行

包含数组的熊猫系列

如何合并字符串包含的熊猫?