在 pandas 中使用 IP 地址列对 CSV 进行排序

问题描述 投票:0回答:1

我有一个 CSV 文件,其中有一列 IP 地址、MAC 地址和一些其他数据。我想按 IP 地址升序对所有数据进行排序

输入:


| IP Address   | MAC Address | ID    |
| ---          | ---         | ---   |
| 10.10.10.1   | {mac1}      | {id1} |
| 10.10.10.112 | {mac2}      | {id2} |
| 10.10.10.17  | {mac3}      | {id3} |
| 10.10.10.7   | {mac4}      | {id4} |

我期望的输出是:

| IP Address   | MAC Address | ID    |
| ---          | ---         | ---   |
| 10.10.10.1   | {mac1}      | {id1} |
| 10.10.10.7   | {mac4}      | {id4} |
| 10.10.10.17  | {mac3}      | {id3} |
| 10.10.10.112 | {mac2}      | {id2} |

IP 地址与其对应的 MAC 和 ID 按正确的升序排列

我试过使用 pandas

Dataframe.sort_values()
,它没有密钥将 IP 地址按不正确的升序排列,因为它将 IP 视为整数而不是 IP 地址。我也尝试过使用
sort_values()
和参数
key=ipaddress.IPv4Address
但我只是得到一个
KeyError

df_new = df.sort_values(df['IP_Address'], key=ipaddress.IPv4Address)

我还尝试了

sorted()
将 IP 地址按正确顺序放入列表中,然后当我将其放回数据框中时,它不会对每个 IP 的相应 MAC 和 ID 进行排序

python pandas csv sorting ip-address
1个回答
0
投票

这种方法使用

Series.str.split
df.apply()

new_df = (df.sort_values(by=["IP Address"], key=lambda x: x.str.split(".")
               .apply(lambda y: [int(z) for z in y])))
print(new_df)

     IP Address MAC Address     ID
0    10.10.10.1      {mac1}  {id1}
3    10.10.10.7      {mac4}  {id4}
2   10.10.10.17      {mac3}  {id3}
1  10.10.10.112      {mac2}  {id2}
© www.soinside.com 2019 - 2024. All rights reserved.