Генерация объекта с данными из CSV эффективно в Python - PullRequest
0 голосов
/ 24 августа 2018

У меня есть файл .csv с информацией об узле (включая node_id, x, y), и я пытаюсь сгенерировать объект для каждой записи в файле .csv. Сейчас я использую метод apply, но он занимает почти то же время выполнения, что и цикл for (1 мин). Как я могу сделать это эффективно (меньше времени выполнения), так как файл .csv содержит огромное количество записей.

import pandas as pd
import datetime

class Node:
    def __init__(self):
        self.node_id = 0
        self.x = 0.0
        self.y = 0.0

    def load_data(x):
        node = Node()
        node.node_id = x['node_id']
        node.x = x['x']
        node.y = x['y']
        return node

if "__main__" == __name__:
    time1 = datetime.datetime.now()
    node_info = pd.read_csv('input_node.csv', header = 0)
    node_series = node_info.apply(Node.load_data,axis=1)
    node_list = list(node_series.values)
    time2 = datetime.datetime.now()
    time_delta = time2 - time1

.csv file sample

1 Ответ

0 голосов
/ 24 августа 2018

Я провел несколько тестов, и вы будете лучше строить свои узлы при чтении строк CSV:

import csv

class Node:
    def __init__(self, node_id, x, y):
        self.node_id = node_id
        self.x = x
        self.y = y

with open('input_node.csv') as fin:
    reader = csv.reader(fin)
    header = next(reader)  # read header
    node_list = [Node(*row) for row in reader]

Это должно быть намного быстрее, чем ваша текущая реализация

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