gpt4 book ai didi

python - 使用 pandas 或 blaze 从非常大的 CSV 文件中删除列

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

我有一个非常大的 csv 文件 (5 GB),所以我不想将整个文件加载到内存中,我想删除其中的一个或多个列。我尝试在 blaze 中使用以下代码,但它所做的只是将结果列附加到现有的 csv 文件中:

from blaze import Data, odo
d = Data("myfile.csv")
d = d[columns_I_want_to_keep]
odo(d, "myfile.csv")

有没有办法使用 pandas 或 blaze 只保留我想要的列并删除其他列?

最佳答案

您可以使用 dask.dataframe ,它在语法上与 pandas 相似,但在核心之外进行操作,因此内存不应该成为问题。它还会自动并行处理该过程,因此速度应该很快。

import dask.dataframe as dd

df = dd.read_csv('myfile.csv', usecols=['col1', 'col2', 'col3'])
df.to_csv('output.csv', index=False)

时间

到目前为止,我已经在一个 1.4 GB 的 csv 文件中对每个方法进行了计时。我保留了四列,将输出 csv 文件保留为 250 MB。

使用达斯克:

%%timeit
df = dd.read_csv(f_in, usecols=cols_to_keep)
df.to_csv(f_out, index=False)

1 loop, best of 3: 41.8 s per loop

使用 Pandas :

%%timeit
chunksize = 10**5
for chunk in pd.read_csv(f_in, chunksize=chunksize, usecols=cols_to_keep):
chunk.to_csv(f_out, mode='a', index=False)

1 loop, best of 3: 44.2 s per loop

使用 Python/CSV:

%%timeit
inc_f = open(f_in, 'r')
csv_r = csv.reader(inc_f)
out_f = open(f_out, 'w')
csv_w = csv.writer(out_f, delimiter=',', lineterminator='\n')
for row in csv_r:
new_row = [row[1], row[5], row[6], row[8]]
csv_w.writerow(new_row)
inc_f.close()
out_f.close()

1 loop, best of 3: 1min 1s per loop

关于python - 使用 pandas 或 blaze 从非常大的 CSV 文件中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149288/

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