如何基于Pandas从机架管理软件导出的DataFrame列中提取数据中心缩写并填充目标DataFrame列?
解决DataFrame提取数据中心缩写填充site列的问题
我明白你现在的困扰——你想要从blade_original的Region列(格式如DC_Rack_01)提取数据中心缩写,填充到blade_netbox的site列,但之前用np.where搭配str.contains的写法只返回了布尔值,没法拿到实际的缩写字符串对吧?咱们来针对性解决这个问题:
为什么你的原有代码不生效?
你的代码:
blade_netbox['site'] = np.where(blade_original.Region.str.contains('Site_acronym'), blade_netbox['site'], 'Site_acronym')
问题在于str.contains('Site_acronym')只会返回布尔值(True/False),用来判断字符串是否包含指定内容,但它不会帮你提取出实际的缩写。而且你赋值的是固定字符串'Site_acronym',不是从Region列里提取的真实值,这就导致结果不符合预期。
方案1:针对固定格式的简单拆分(推荐)
如果所有Region列的格式都是[数据中心缩写]_Rack_xx这种固定下划线分隔的结构,直接按下划线拆分字符串,取第一个元素即可:
# 按下划线分割字符串,取第一个部分作为site值 blade_netbox['site'] = blade_original['Region'].str.split('_').str[0]
比如DC_Rack_01会被拆分成['DC', 'Rack', '01'],取索引0的元素就是DC,完美匹配你的需求。
方案2:针对多缩写匹配的正则提取
如果你的数据中心缩写有多种可能(比如DC、NY、LN等),且需要精准匹配开头的缩写,可以用正则表达式的str.extract方法:
# 定义所有可能的数据中心缩写列表 site_acronyms = ['DC', 'NY', 'LN'] # 构建正则模式:匹配字符串开头的任意一个缩写 pattern = fr"^({'|'.join(site_acronyms)})" # 提取匹配到的缩写,未匹配到的用'Unknown'填充 blade_netbox['site'] = blade_original['Region'].str.extract(pattern, expand=False).fillna('Unknown')
^表示匹配字符串的开头,确保我们只提取最前面的缩写;|用来分隔多个可能的缩写,实现“或”匹配;str.extract会返回匹配到的具体字符串,而不是布尔值,完全符合你的需求。
额外适配:兼容多种分隔符
如果Region列的分隔符不固定(比如有的是DC-Rack-01横杠,有的是下划线),可以稍微调整拆分或正则逻辑:
- 拆分方式:
str.split('[-_]')(用正则匹配横杠或下划线作为分隔符) - 正则模式:把分隔符部分改成
[-_],比如fr"^({'|'.join(site_acronyms)})[-_]",再提取前面的缩写。
内容的提问来源于stack exchange,提问作者rbrt
相关产品推荐
相关产品推荐

