Получение данных из Dataframe и передача их в новый пустой DataFrame - PullRequest
0 голосов
/ 21 марта 2019

У меня есть DataFrame, который читает из файла CSV. Я использовал функцию 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, port и datetime. Имена столбцов для второго df: IP, ASN и Source.

Ответы [ 3 ]

0 голосов
/ 21 марта 2019

Инициализировать newdf в начале цикла:

e.g. 
newdf = pd.DataFrame({"IP": '1.1.1.1'},index=[0])

После этого цикл должен иметь возможность добавлять фрейм данных

0 голосов
/ 21 марта 2019

Вероятно, более эффективно создавать пустой список вне цикла, добавлять к нему вновь созданные кадры данных, а затем вне цикла использовать 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)
0 голосов
/ 21 марта 2019

append не выполняет операцию на месте.Вы хотите что-то вроде:

newdf = newdf.append(newdata)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...