我有一个从csv文件读取的DataFrame。 我使用loc函数从第一个csv文件成功获取数据。我的问题是我无法将从第一个csv文件获得的数据添加到新的DataFrame中。
import csv
import socket
import pandas as pd
import ipaddress
import numpy as np
print("Reading data from original csv...")
originaldata = pd.read_csv("input.csv")
sip_data = originaldata.sip
dip_data = originaldata.dip
print("Reading from asn csv...")
asndata = pd.read_csv("asn_ip(4).csv", delimiter = ';')
asn_data = asndata.IP
print(asn_data.head())
newdf = pd.DataFrame()
print("Processing data...")
for sip in sip_data:
print("In for loop for sip in sip_data")
find = False
index = False
for IP in asn_data:
print("In for loop for IP in asn_data")
IP_u = unicode(IP)
print("IP_u = " + IP_u)
print("IP = " + IP)
sip_u = unicode(sip)
print("sip_u = " + sip_u)
if ipaddress.ip_address(sip_u) in ipaddress.ip_network(IP_u):
print("Address found")
info = asndata.loc[asndata['IP'] == IP_u].head(1)
print(info)
newdata = pd.DataFrame({"IP": IP}, index=[0])
newdf.append(newdata)
else:
print("Not found")
运行此代码后,数据框仍然为空。
Empty DataFrame
Columns: []
Index: []
第一个df的列名称为sip,端口和日期时间。 第二个df的列名称为IP,ASN和Source。
答案 0 :(得分:0)
append不会执行适当的操作。您想要类似的东西:
newdf = newdf.append(newdata)
答案 1 :(得分:0)
在循环开始时初始化newdf:
e.g.
newdf = pd.DataFrame({"IP": '1.1.1.1'},index=[0])
然后循环应该能够附加数据框
答案 2 :(得分:0)
在循环外实例化一个空列表,将新创建的数据框附加到此列表,然后在循环外使用pd.concat在刚填充数据框的列表上,可能会更有效。
顺便说一句,我不确定使用index=[0]
是个好主意。新创建的数据框中的所有行的索引值都将为0,这实际上会使索引无用。
下面的伪代码:
newdf_list = []
for sip in sip_data:
....
newdf_list.append(pd.DataFrame({"IP": IP}, index=[0]))
newdf = pd.concat(newdf_list)