簡體   English   中英

如何從 pandas 中的特定列中刪除非數字值?

[英]How do I remove non-numeric values from specific column in pandas?

['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')

處理時間太長,因為它有 250k 行,而且我也看不到結果。 我擔心的是它們並不全是數字。 像'443','80'代替443、80還有0xb0eb。 我怎樣才能擺脫 0xb0eb 它們並將此列轉換為 int 數據類型?

這些實際上是整數,只是以不同的基數(基數 16,也稱為十六進制)表示。 int() function 采用可選的第二個基數參數。 我們可以檢查一個字符串是否只包含數字字符,如果是,則使用 10 作為基數,否則使用 16:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM