gpt4 book ai didi

python - 在 python 中读取逗号分隔文件(包括日期时间)的最快方法

转载 作者:行者123 更新时间:2023-11-28 19:36:07 29 4
gpt4 key购买 nike

我将数据存储在以逗号分隔的 txt 文件中。其中一列代表日期时间。

我需要将每一列加载到单独的 numpy 数组中(并将日期解码为 python 日期时间对象)。

最快的方法是什么(就运行时间而言)?

注意。这些文件有数百 MB 的数据,目前需要几分钟才能加载。

例如我的数据.txt

15,3,0,2003-01-01 00:00:00,12.2
15,4.5,0,2003-01-01 00:00:00,13.7
15,6,0,2003-01-01 00:00:00,18.4
15,7.5,0,2003-01-01 00:00:00,17.9
15,9,0,2003-01-01 00:00:00,17.7
15,10.5,0,2003-01-01 00:00:00,16.3
15,12,0,2003-01-01 00:00:00,17.2

这是我当前的代码(可以运行,但速度很慢):

import csv
import datetime
import time
import numpy

a=[]
b=[]
c=[]
d=[]
timestmp=[]

myfile = open('mydata.txt',"r")

# Read in the data
csv_reader = csv.reader(myfile)
for row in csv_reader:
a.append(row[0])
b.append(row[1])
c.append(row[2])
timestmp.append(row[3])
d.append(row[4])

a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)
d = numpy.array(d)

# Convert Time string list into list of Python datetime objects
times = []
time_format = "%Y-%m-%d %H:%M:%S"
for i in xrange(len(timestmp)):
times.append(datetime.datetime.fromtimestamp(time.mktime(time.strptime(timestmp[i], time_format))))

有没有更有效的方法来做到这一点?

非常感谢任何帮助 - 谢谢!

(编辑:最后发现瓶颈是日期时间转换,而不是像我最初假设的那样读取文件。)

最佳答案

首先,您应该使用 Python 的内置 profiler 运行示例脚本看看问题到底出在哪里。您可以从命令行执行此操作:

python -m cProfile myscript.py

其次,至少让我印象深刻的是,为什么底部的循环是必要的?在 numpy 数组实例化之上的循环中读取 mydata.txt 时是否存在技术原因无法完成?

第三,你应该直接创建日期时间对象,因为它也支持strptime。您不需要创建时间戳,制作时间,只需根据时间戳制作日期时间。你在底部的循环可以像这样重写:

times = []
timestamps = []
TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
for t in timestmp:
parsed_time = datetime.datetime.strptime(t, TIME_FORMAT)
times.append(parsed_time)
timestamps.append(time.mktime(parsed_time.timetuple()))

我也可以自由地对您的代码进行 PEP-8 处理,例如将常量更改为全部大写。此外,您只需使用 in 运算符即可遍历列表。

关于python - 在 python 中读取逗号分隔文件(包括日期时间)的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5223967/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com