Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “如何拆卸/更换”;域\“;从数据帧列?_Python_Regex_Pandas_Dataframe_Strip - Fatal编程技术网

Python “如何拆卸/更换”;域\“;从数据帧列?

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()与正则表达式以及字符串文字一起使用,但

我有一个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)


当我使用
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()
,也有同样的陷阱。