gpt4 book ai didi

python - 将多个数据文件中的某些列读取到python中的一个文件中

转载 作者:行者123 更新时间:2023-11-28 18:34:04 24 4
gpt4 key购买 nike

我有大约 30 个数据文件,我需要提取第 4、5 和 6 列。然后跳过 14 列并获取接下来的 3 列,依此类推直到文件末尾。每个数据文件大约有 400 行和 17000 列。到目前为止我有这个:

file_list = glob.glob('*.dat')

with open("result.dat", "wb") as outfile:
for f in file_list:
with open(f, "rb") as infile:
outfile.write(infile.read())

data = np.loadtxt('result.dat')

arr = np.array(data)
a = arr[:, 4:-1:17]
b = arr[:, 5:-1:17]
c = arr[:, 6:-1:17]

这是在编写一个名为 result.dat 的文件,其中包含来自多个文件的所有数据,然后我提取我需要的列。但是,创建数组需要很长时间,因为它正在写入我不需要的所有信息。有没有办法只读入我感兴趣的特定列,而不是读入 result.dat 文件?这应该会显着缩短时间。

最佳答案

numpy.loadtxt 是一个纯 python 实现,它在某种程度上很慢。使用 pandas.read_csv() 会更快。您也不需要编写另一个包含完整内容的文件(如果您不需要此文件用于其他目的)。

这是使用 pandas.read_csv 的等效代码:

import glob
import pandas as pd

file_list = glob.glob('*.dat')
cols = [4, 21, 38] # add more columns here

df = pd.DataFrame()

for f in file_list:
df = df.append(
pd.read_csv(f, delimiter='\s+', header=None, usecols=cols),
ignore_index=True,
)

arr = df.values

等效的 numpy 代码是:

import glob
import numpy as np

file_list = glob.glob('*.dat')
cols = [0, 1, 2] # add more columns here

data = []
for f in file_list:
data.append(np.loadtxt(f, usecols=cols))

arr = np.vstack(data)

如果同时使用 10 个形状为 (10000, 10) 的随机数文件进行计时。

Pandas 解决方案:0.95秒

numpy 解决方案:2.6秒

关于python - 将多个数据文件中的某些列读取到python中的一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34120662/

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