У меня есть два DataFrames, df1
и df2
, структурированные следующим образом:
ip_address property_A
1.1.1.1 AAA
1.2.2.2 BBB
1.3.3.3 CCC
... ...
1.255.255.255.255 ZZZ
ip_address property_B
1.1.1.1 YRG
1.2.2.2 HJK
1.3.3.3 KJH
... ...
1.255.255.255.255 TYU
И я хочу объединить их в столбце «ip_address».Из-за характера данных, содержащихся в этом столбце, эта команда не выполняется:
pd.merge(df1, df2, on='ip_address', how='inner')
>> dtype: object does not appear to be an IPv4 or IPv6 address
Возможным решением будет преобразование IP-адресов в целые числа с использованием модуля ipaddress
, как в этом примере:
import ipaddress
int(ipaddress.IPv4Address('192.168.0.1'))
>> 3232235521
Чтобы сделать это эффективно, я попробовал эту команду:
import numpy as np
import pandas as pd
df1['int_ip'] = np.nan
df1.int_ip = int(ipaddress.IPv4Address(df1.ip_address))
Однако даже эта команда не работает:
>> AddressValueError: Expected 4 octets in [...]
Единственный подход, который кажетсявозможно следующее:
for i in range(0, df1.shape[0]):
df1.int_ip[i] = int(ipaddress.IPv4Address(df1.ip_address[i]))
Но этот крайне неэффективен.
У вас есть лучший подход?