如何从 Pandas DataFrame 列中 strip/replace "domain\"?
How to strip/replace "domain\" from Pandas DataFrame Column?
我有一个 pandas DataFrame,它是从 CSV 中读取的,该 CSV 包含计算机的主机名,包括它们所属的域以及一堆其他列。我正在尝试删除域信息,这样我就只剩下主机名了。
DataFrame 例如:
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 时,None 似乎做了任何更改
您可以使用 .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
您已经接近答案了,只需使用:
df['name'] = df['name'].str.replace(r'.*\', '', regex = True)
它只是添加了您尝试过的代码之一中的 using r-string。
此处不使用 r-string,该字符串等同于 .*\
,在最终的正则表达式中将被解释为只有一个 \
。但是,对于 r-string,字符串将变为 '.*\\'
并且每对 \
最终将被解释为一个 \
并且最终结果如您所料变为 2 个斜杠。
输出:
0 computername1
1 computername45
2 servername1
3 computername3
4 servername64
Name: name, dtype: object
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]
我有一个 pandas DataFrame,它是从 CSV 中读取的,该 CSV 包含计算机的主机名,包括它们所属的域以及一堆其他列。我正在尝试删除域信息,这样我就只剩下主机名了。
DataFrame 例如:
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 时,None 似乎做了任何更改
您可以使用 .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
您已经接近答案了,只需使用:
df['name'] = df['name'].str.replace(r'.*\', '', regex = True)
它只是添加了您尝试过的代码之一中的 using r-string。
此处不使用 r-string,该字符串等同于 .*\
,在最终的正则表达式中将被解释为只有一个 \
。但是,对于 r-string,字符串将变为 '.*\\'
并且每对 \
最终将被解释为一个 \
并且最终结果如您所料变为 2 个斜杠。
输出:
0 computername1
1 computername45
2 servername1
3 computername3
4 servername64
Name: name, dtype: object
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]