如何解决如何从 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)
解决方法
您已经接近答案了,只需使用:
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。