代码之家  ›  专栏  ›  技术社区  ›  Karn Kumar

我们能在熊猫数据框中使用通配符吗

  •  1
  • Karn Kumar  · 技术社区  · 6 年前

    我有下面的代码可以用,但它会抛出一些 UserWarning 打印数据时..

    import pandas as pd
    
    pd.set_option('display.height', None)
    pd.set_option('display.max_rows', None)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.width', None)
    pd.set_option('expand_frame_repr', True)
    
    data = pd.read_csv('/home/karn/plura/Test/Python_Pnada/Cyber_July.csv', usecols=['Platform ID', 'Safe', 'Target system address', 'Failure reason'])
    hostData = data[data['Platform ID'].str.startswith("CS-Unix-")][data['Safe'].str.startswith("CS-NOI-DEFAULT-UNIX-ROOT")] [['Platform ID', 'Safe', 'Target system address','Failure reason']]
    hostData.reset_index(level=0, drop=True)
    print(hostData)
    

    下面是用户警告。

    ./CyberCSV.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
      hostData  = data[data['Platform ID'].str.startswith("CS-Unix-")][data['Safe'].str.startswith("CS-NOI-DEFAULT-UNIX-ROOT")] [['Platform ID', 'Safe', 'Target system address','Failure reason']]
    

    第二,有没有一种方法可以像我一样在数据帧中使用通配符?

    data['Safe'].str.startswith("CDS-NOI-DEFAULT-UNIX-ROOT") 我想用的地方 data['Safe'].str.startswith("CDS-*DEFAULT-UNIX-ROOT")

    这有可能吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    你可以用链子 startswith endswith 面具或使用 contains - ^ 用于匹配字符串开头, .* 用于任何字符串和 $ 结束:

    mask = data['Safe'].str.startswith("CDS") & data['Safe'].str.endswith("DEFAULT-UNIX-ROOT")
    

    或regex:

    mask = data['Safe'].str.contains("^CDS-.*DEFAULT-UNIX-ROOT$")
    

    样品 :

    data = pd.DataFrame({'Safe':['CDS-DEFAULT-UNIX-ROOT',
                                 'CDS-NhjghOI-DEFAULT-UNIX-ROOT',
                                 'CDS-NhjghOI-DEFAULT',
                                 'ACDS-DEFAULT-UNIX-ROOT']})
    
    print (data)
                                Safe
    0          CDS-DEFAULT-UNIX-ROOT
    1  CDS-NhjghOI-DEFAULT-UNIX-ROOT
    2            CDS-NhjghOI-DEFAULT
    3         ACDS-DEFAULT-UNIX-ROOT
    
    mask = data['Safe'].str.contains("^CDS-.*DEFAULT-UNIX-ROOT$")
    print (mask)
    0     True
    1     True
    2    False
    3    False
    Name: Safe, dtype: bool