亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓檢查哪個子網IP地址屬于

熊貓檢查哪個子網IP地址屬于

肥皂起泡泡 2021-06-08 11:50:27
我有一個包含用戶及其 IP 地址的 Pandas 數據框:users_df = pd.DataFrame({'id': [1,2,3],                         'ip': ['96.255.18.236','105.49.228.135','104.236.210.234']})   id               ip0   1    96.255.18.2361   2   105.49.228.1352   3  104.236.210.234以及包含網絡范圍和相應地理名稱 ID 的單獨數據框:geonames_df = pd.DataFrame({'network': ['96.255.18.0/24','105.49.224.0/19','104.236.128.0/17'],                            'geoname': ['4360369.0','192950.0','5391959.0']})     geoname           network0  4360369.0    96.255.18.0/241   192950.0   105.49.224.0/192  5391959.0  104.236.128.0/17對于每個用戶,我需要針對所有網絡檢查他們的 ip,并提取相應的 geoname 并將其添加到users_df. 我想要這個作為輸出:   id               ip   geonames0   1    96.255.18.236  4360369.01   2   105.49.228.135   192950.02   3  104.236.210.234  5391959.0在這個例子中很簡單,因為它們的順序是正確的,只有 3 個例子。實際上,users_df有 4000 行,并且geonames_df有超過 300 萬行我目前正在使用這個:import ipaddressnetworks = []for n in geonames_df['network']:    networks.append(ipaddress.ip_network(n))geonames = []for idx, row in users_df.iterrows():    ip_address = ipaddress.IPv4Address(row['ip'])    for block in networks:        if ip_address in block:            geonames.append(str(geonames_df.loc[geonames_df['network'] == str(block), 'geoname'].item()))            breakusers_df['geonames'] = geonames由于數據幀/列表上的嵌套循環,這非常慢。有沒有更快的方法來利用 numpy/pandas?或者至少是某種比上述方法更快的方法?有一個類似的問題(如何在 python 2.x 中檢查 ip 是否在網絡中?),但是 1)它不涉及 pandas/numpy,2)我想針對多個網絡檢查多個 IP ,以及 3 ) 得票最高的答案無法避免嵌套循環,這就是我性能緩慢的原因
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號