如何从数据框列中剥离/替换“域”?

2024-09-29 21:46:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,它是从CSV读取的,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)吐出数据帧时,所有这些似乎都没有做任何更改


Tags: csv数据name信息falsetruepandasdf
3条回答

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

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

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

在这里不使用r-string,该字符串相当于.*\\,它将被解释为最后一个正则表达式中的一个\。但是,使用r-string时,字符串将变成'.*\\\\',每对\\将最终解释为一个\,最终结果将变成您期望的两个斜杠

输出:

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

您可以使用.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

没有使用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]

相关问题 更多 >

    热门问题