代码之家  ›  专栏  ›  技术社区  ›  curiousninja

如何从pandas中的特定列中删除非数值?

  •  0
  • curiousninja  · 技术社区  · 2 年前
    ['0' '58699' '443' '55420' '53' '1900' '80' '0xb058' '0xacd9' '0xc0a8'
     '0x1432' '0x0000' '123' '67' '5353' '2104' '547' '1' '53290' '4805'
     '2151' '58767' '27643' '58652' '64416' '62529' '55952' '57286' '64466'
     '50497' '0xa29f' '0x2d8e' '0x5b79' '0xb0eb' '0x87b5' '0x8efa' '0xd83a'
     '52142' '52138' '52920' '60162' '54214' '50848' '56986' '50367' '49460'
     '55963' '53327' '52022' '57400' '51755' '52834' '54183' '62724' '54871'
     '59845' '56309' '61878' '58326' '56686']
    

    列的唯一值如下所示。当我跑步时:

    df[df.DstPort.apply(lambda x: x.isnumeric())].set_index('DstPort')
    

    它需要太长的时间来处理,因为它有25万行,我也无法看到结果。我担心的是,它们并非都是数字。比如'443','80'而不是443,80,还有0xb0eb。如何摆脱0xb0eb,并将此列转换为int数据类型?

    2 回复  |  直到 2 年前
        1
  •  0
  •   ddejohn    2 年前

    这些实际上是整数,只是用不同的基数(基数16,也称为十六进制)表示。你想要吗?如果是,请使用

    df.DstPort.apply(lambda x: int(x, 10 if x.isnumeric() else 16))
    

    如果你不想要它们,就过滤掉 str.isnumeric() 然后使用 .astype() :

    df[df.DstPort.str.isnumeric()].astype(int)