【问题标题】:Python Pandas if df1.col starts with(string), create df2.col with that string?Python Pandas 如果 df1.col 以(字符串)开头,使用该字符串创建 df2.col?
【发布时间】:2021-06-09 14:40:47
【问题描述】:

我有一个从机架管理软件导出的数据,我需要对其进行操作并加载到新系统中。

在当前导出 (df1) 中,我有一列包含其中一个数据中心的首字母缩写词。即:列“Region”,其值格式为“DC_Rack_01”。

我创建了一个空数据框 (df2),最终将其导入新系统。此 df2 将使用来自 df1 的数据填充,但字段不匹配 1:1。这个新的数据框(df2)必须有一个列“site”,其中必须有首字母缩写词“DC”(或其他数据中心的名称)。我正在考虑按照帖子问题中的说明做一些事情(我希望它不会太混乱):

如果 df1.region 以 ("DC") 开头,则使用 "DC" 填充列 df2.site

我尝试了以下代码,但它返回一个布尔值 True/False,但我想要实际的字符串“DC”。

blade_netbox['site'] = np.where(blade_original.Region.str.contains('Site_acronym'), 
                            blade_netbox['site'], 'Site_acronym')

我不太确定如何在问题正文中添加除 ASCII 表之外的表,我觉得对于这个示例来说有点太复杂了。我希望我的数据框的图像能够正常工作。

【问题讨论】:

  • 您可能需要提供示例数据,因为目前我们无法重现该错误。
  • 我希望这有助于可视化我的需求。谢谢!

标签: python pandas


【解决方案1】:

这是一个使用正则表达式的解决方案:

代码:

import re
df=pd.read_csv('mycsv.csv')
print(df)
site_acronym = 'DC'

df['site'] = df['Region'].apply(lambda x:site_acronym if re.match(f'[${site_acronym}].+', x) else '')
print(df)

输入:

       Region        device
0  DC_Rack_01  blade server
1  DC_Rack_02  blade server
2     Rack_03           NaN
3   RackDC_03           NaN

输出:

       Region        device site
0  DC_Rack_01  blade server   DC
1  DC_Rack_02  blade server   DC
2     Rack_03           NaN     
3   RackDC_03           NaN   

说明:

  1. $ 表示字符串的开始
  2. [] 表示匹配括号内的精确模式
  3. . 除换行符以外的任何字符
  4. + 单字符正则表达式出现一次或多次,这里.+ 表示站点首字母缩写词后的任何字符出现一次或多次

如果您希望站点首字母缩写词后的任何字符出现零次或多次,您可以使用.*

【讨论】:

    【解决方案2】:

    如果您想获取前缀而不是布尔值,可以尝试使用 .str method 获取它们(以防它遵循常规模式)

    例如

    blade_netbox['site'] = blade_original['Region'].str[:2] # first two characters
    

    blade_netbox['site'] = blade_original['Region'].str.split('_').str[0] # first fragment when splitting by underscore
    

    【讨论】:

      【解决方案3】:

      假设'Site_acronym' 始终是'region' 列的前两个字母,您可以尝试:

      blade_netbox['site'] = blade_original['Region'].apply(lambda x: x[:2])
      

      输出:

             name        device site
      0  device_1  blade server   DC
      1  device_2  blade server   DC
      

      编辑: 这仅适用于两个 DataFrame 具有相同长度且行具有相同顺序的情况。

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        相关资源
        最近更新 更多