首页 > 解决方案 > 在python中有效地使用来自csv的数据生成对象

问题描述

我有一个包含节点信息(包括 node_id、x、y)的 .csv 文件,我尝试为 .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 文件示例

标签: pythonpandascsvclass

解决方案


我做了一些测试,在读取 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]

这应该比您当前的实现快得多


推荐阅读