如何从 Pandas DataFrame 列中 strip/replace "domain\"?

How to strip/replace "domain\" from Pandas DataFrame Column?

我有一个 pandas DataFrame,它是从 CSV 中读取的,该 CSV 包含计算机的主机名,包括它们所属的域以及一堆其他列。我正在尝试删除域信息,这样我就只剩下主机名了。

DataFrame 例如:

name
domain1\computername1
domain1\computername45
dmain3\servername1
dmain3\computername3
domain1\servername64
....

我试过将 str.strip() 和 str.replace() 与正则表达式和字符串文字一起使用,但我似乎无法正确定位域信息。

到目前为止我尝试过的示例:

df['name'].str.strip('.*\')

df['name'].str.replace('.*\', '', regex = True)

df['name'].str.replace(r'[.*\]', '', regex = True)

df['name'].str.replace('domain1\\', '', regex = False)
df['name'].str.replace('dmain3\\', '', regex = False)
当我使用 logging.debug(df)

吐出 DataFrame 时,

None 似乎做了任何更改

您可以使用 .str.split:

df["name"] = df["name"].str.split("\", n=1).str[-1]
print(df)

打印:

             name
0   computername1
1  computername45
2     servername1
3   computername3
4    servername64

您已经接近答案了,只需使用:

df['name'] = df['name'].str.replace(r'.*\', '', regex = True)

它只是添加了您尝试过的代码之一中的 using r-string。

此处不使用 r-string,该字符串等同于 .*\,在最终的正则表达式中将被解释为只有一个 \。但是,对于 r-string,字符串将变为 '.*\\' 并且每对 \ 最终将被解释为一个 \ 并且最终结果如您所料变为 2 个斜杠。

输出:

0     computername1
1    computername45
2       servername1
3     computername3
4      servername64
Name: name, dtype: object

ntpath.basename 没有正则表达式方法:

import pandas as pd
import ntpath
df = pd.DataFrame({'name':[r'domain1\computername1']})
df["name"] = df["name"].apply(lambda x: ntpath.basename(x))

结果computername1

rsplit:

df["name"] = df["name"].str.rsplit('\').str[-1]