我正在搜索excel格式的配置转储。
我正在寻找IP地址匹配项,可以在其中收集新的数据框或匹配的行列表。
到目前为止,我设法对IP地址的两列进行了迭代,当它们匹配时,查找该行并分配给变量。
现在我被卡住了,因为使用pandas dataframe amend方法修改的变量似乎不起作用。
然后仅在这次我知道获得比我所需更多的信息时,才尝试附加到常规列表中。
68 0 名称:下一个参考索引,dtype:int64
我很乐意帮助您弄清楚如何摆脱多余的数据而仅保留值,或者创建具有所有匹配项的新数据框以进行进一步处理。
int
我希望输出结果是一个具有所有匹配项的新数据框,或者是一个列表,其中每一行都是3个值
# iterate through the two lists of ips and look for
# duplicate values, if value is nan then skip
for line_1 in df_1['IPv4 address']:
# ignore null lines
if 'nan' in str(line_1):
pass
for line_2 in df_2['IPv4 address']:
if 'nan' in str(line_2):
pass
# if the ip addresses match
if line_1 == line_2:
# look up the row in the dataframes ready for comparison
result_1 = df_1.loc[df_1['IPv4 address'] == line_1]
result_2 = df_2.loc[df_2['IPv4 address'] == line_2]
# should I append the different details to a list?
# or append to a dataframe?
# when appending to a dataframe it did not seem to work
# and returned an empty dataframe
result = (str(result_1['IP route name'])
+ str(result_1['IPv4 address'])
+ str(result_1['Next reference index']))
results.append(result)
答案 0 :(得分:0)
您可以尝试如下操作: 重命名列后,您将两个数据帧合并在一起,然后通过执行pandas过滤器直接比较IPV4列,以此仅提取所需的行:
import pandas as pd
import numpy as np
df2 = pd.DataFrame(np.array([["ip_route1", "1.1.1.1",1], ["ip_route2", "2.2.2.2",2],["ip_route2", "4.3.3.4",3]]),columns=['IP_ROUTE', 'IPV4_AD','REF_INDEX'])
df1 = pd.DataFrame(np.array([["ip_route1", "1.1.1.1",1], ["ip_route2", "2.2.2.2",2], ["ip_route2", "3.3.3.3",3]]),columns=['IP_ROUTE', 'IPV4_AD','REF_INDEX'])
print(df1)
# IP_ROUTE IPV4_AD REF_INDEX
# 0 ip_route1 1.1.1.1 1
# 1 ip_route2 2.2.2.2 2
# 2 ip_route2 3.3.3.3 3
print(df2)
# IP_ROUTE IPV4_AD REF_INDEX
# 0 ip_route1 1.1.1.1 1
# 1 ip_route2 2.2.2.2 2
# 2 ip_route2 4.3.3.4 3
df1 = df1.rename(columns={"IPV4_AD": "IPV4_AD1", "IP_ROUTE":"IP_ROUTE_1"}).set_index("REF_INDEX")
df2 = df2.rename(columns={"IPV4_AD": "IPV4_AD2", "IP_ROUTE":"IP_ROUTE_2"}).set_index("REF_INDEX")
df = df1.join(df2).reset_index()
print(df)
# REF_INDEX IP_ROUTE_1 IPV4_AD1 IP_ROUTE_2 IPV4_AD2
# 0 1 ip_route1 1.1.1.1 ip_route1 1.1.1.1
# 1 2 ip_route2 2.2.2.2 ip_route2 2.2.2.2
# 2 3 ip_route2 3.3.3.3 ip_route2 4.3.3.4
TempResult = df[df["IPV4_AD1"]==df["IPV4_AD2"]]
print(TempResult)
# REF_INDEX IP_ROUTE_1 IPV4_AD1 IP_ROUTE_2 IPV4_AD2
# 0 1 ip_route1 1.1.1.1 ip_route1 1.1.1.1
# 1 2 ip_route2 2.2.2.2 ip_route2 2.2.2.2
result = TempResult[["IP_ROUTE_1","IPV4_AD1"]]
# .rename(columns={"IP_ROUTE_1","IP_ROUTE","IPV4_AD1","IPV4_AD"})
print(result)$
# IP_ROUTE_1 IPV4_AD1
# 0 ip_route1 1.1.1.1
# 1 ip_route2 2.2.2.2