如何从 Pandas DataFrame 列中去除/替换“域\”?

问题描述

我有一个从 CSV 读取的 Pandas DataFrame,该 CSV 具有计算机的主机名,包括它们所属的域以及一堆其他列。我正在尝试去除域信息,以便只留下主机名。

数据帧示例:

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 时,这些似乎都没有进行任何更改

解决方法

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

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

它只是从您尝试过的代码之一中使用 r-string 添加。

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

输出:

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

,

您可以使用 async findKitsWithResultNoReg() { try { const a0 = await sequelize.query(`SELECT kitID,result,resultDate from kits where result in (1,2,3) and cp = 0 and archived = 0 and not Exists(select kitID from users where kits.kitID = users.kitID) order by resultDate desc`,{ type: QueryTypes.SELECT }) const a1 = JSON.stringify(a0) return a1 } catch (error) { console.log(error) } },

.str.split

打印:

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

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]