Python “如何拆卸/更换”;域\“;从数据帧列?
我有一个pandas数据框,它是从CSV读取的,CSV包含计算机的主机名,包括它们所属的域以及一系列其他列。我试图去掉域信息,这样我就只剩下主机名了 数据帧示例:Python “如何拆卸/更换”;域\“;从数据帧列?,python,regex,pandas,dataframe,strip,Python,Regex,Pandas,Dataframe,Strip,我有一个pandas数据框,它是从CSV读取的,CSV包含计算机的主机名,包括它们所属的域以及一系列其他列。我试图去掉域信息,这样我就只剩下主机名了 数据帧示例: name domain1\computername1 domain1\computername45 dmain3\servername1 dmain3\computername3 domain1\servername64 .... 我已经尝试使用str.strip()和str.replace()与正则表达式以及字符串文字一起使用,但
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)
当我使用
logging.debug(df)
将数据帧吐出时,这些似乎都没有做任何更改。您可以使用.str.split
:
df["name"] = df["name"].str.split("\\", n=1).str[-1]
print(df)
印刷品:
名称
0计算机名1
1计算机名45
2服务器名1
3计算机名3
4服务器名64
您已经接近答案,只需使用:
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
没有带
ntpath.basename的正则表达式方法
:
将熊猫作为pd导入
导入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.split("\\", n=1).str[-1]
print(df)
df[“name”]=df[“name”].str.rsplit(“\\”).str[-1]
我只是在我的代码中运行了这个,但它仍然没有像预期的那样删除“domain1”:cbDF['name'].str.replace(r'.*\\','',regex=True)logging.debug(cbDF)logging.debug('completed')。这仍然会导致在调试中显示域log@curtiplas只需将其重新分配给df['name']
。。请参阅上面的编辑。明白了-出于某种原因,我假设str.replace的行为类似于str.strip,并且不需要我重新分配DataFrame列。@curtiplas是的,这是我们所有人的常见陷阱。其他一些函数,如.rename()
,也有同样的陷阱。