gpt4 book ai didi

python - 在 IP 地址列上合并两个 DataFrame

转载 作者:行者123 更新时间:2023-11-28 18:05:34 25 4
gpt4 key购买 nike

我有两个 DataFrame,df1df2,结构如下:

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

一个可能的解决方案是使用 ipaddress 模块将 IP 地址转换为整数,如本例所示:

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]))

但是这个效率极低。

你有更好的方法吗?

最佳答案

d = {'ip_address': ['1.1.1.1', '2.2.2.2','3.3.3.3','1.255.255.255'], 'property_A': ['AAA','BBB','CCC','ZZZ']}
df1 = pd.DataFrame(data=d)
b = {'ip_address': ['1.1.1.1', '2.2.2.2','3.3.3.3','1.255.255.255'], 'property_B': ['YRG','HJK','KJH','TYU']}
df2 = pd.DataFrame(data=b)

我会试试这个:

df3= df1.merge(df2.set_index('ip_address'),
left_on=df1.ip_address,
right_index=True)

df1
ip_address property_A
0 1.1.1.1 AAA
1 2.2.2.2 BBB
2 3.3.3.3 CCC
3 1.255.255.255 ZZZ

df2
ip_address property_B
0 1.1.1.1 YRG
1 2.2.2.2 HJK
2 3.3.3.3 KJH
3 1.255.255.255 TYU

df3
ip_address property_A property_B
0 1.1.1.1 AAA YRG
1 2.2.2.2 BBB HJK
2 3.3.3.3 CCC KJH
3 1.255.255.255 ZZZ TYU

关于python - 在 IP 地址列上合并两个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com