gpt4 book ai didi

python - numpy.loadtxt - 否定usecols?

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:37 25 4
gpt4 key购买 nike

我想用 numpy.loadtxt 读取 CSV 文件。我知道我可以使用 usecols 参数指定要读取的列。然而,我真正想要做的是指定一个列列表来阅读。这是因为我实际上并不知道我的文件将包含多少列。

除了读取文件的前几行,确定总列数,然后手动计算要读取的列集之外,还有什么方法可以做到这一点吗?

最佳答案

正如您提到的,没有阅读第一行就不行。

但是,这样做可能更容易:

do_not_read_cols = [3, 4, 9]
data = np.loadtxt('filename')
data = np.delete(data, do_read_cols, axis=1)

这不会非常节省内存,但是 loadtxt 一开始并没有尝试非常节省内存。除非您要删除大部分列,否则调用 loadtxt 将使用比 delete 将生成的后续临时副本更多的内存。


为了扩展我下面的评论,如果你想提高内存效率并且不想使用 pandas,另一种选择是这样的:(注意:写得有点草率。)

import numpy as np

def generate_text_file(length=1e6, ncols=20):
data = np.random.random((length, ncols))
np.savetxt('large_text_file.csv', data, delimiter=',')

def iter_loadtxt(filename, delimiter=',', skiprows=0, skipcols=None,dtype=float):
if skipcols is None:
skipcols = []
def iter_func():
with open(filename, 'r') as infile:
for _ in range(skiprows):
next(infile)
for line in infile:
line = line.rstrip().split(delimiter)
for i, item in enumerate(line):
if i in skipcols:
continue
yield dtype(item)
iter_loadtxt.rowlength = len(line) - len(skipcols)

data = np.fromiter(iter_func(), dtype=dtype)
data = data.reshape((-1, iter_loadtxt.rowlength))
return data

#generate_text_file()
data = iter_loadtxt('large_text_file.csv')

关于python - numpy.loadtxt - 否定usecols?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022809/

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