gpt4 book ai didi

python - 如何加快第一列分割文件的代码

转载 作者:行者123 更新时间:2023-12-01 04:01:44 25 4
gpt4 key购买 nike

import numpy  
import pandas as pd
import math as m
import os
import datetime
from time import gmtime, strftime


final = "D:/Technical_Data/final.csv"

group_col_indx = 0
group_col = pd.read_csv(final, usecols=[group_col_indx])
keys = group_col.iloc[:,0].unique()

for key in keys:
df_list = []
print key
reader = pd.read_csv(final, chunksize=20000)
for chunk in reader:
good_rows = chunk[chunk.iloc[:,group_col_indx] == key]
df_list.append(good_rows)
df_key = pd.concat(df_list)
file_save = "D:/Technical_Data_by_Date/" + str(key) + ".csv"
df_key.to_csv(file_save, header=False,index=False)

在堆栈溢出和谷歌的帮助下,我想出了使用第一列将大文件拆分为多个文件的代码。我在有 8 GB RAM 的机器上运行它。该程序运行速度非常慢。我怎样才能加快速度?我过去两天做了研究,这是我想出的脚本

最佳答案

虽然我确实喜欢 pandas,但在这种情况下我不会使用它,因为你似乎不想处理你的数据,只需将其分开。因此,如果您只想按键(日期)拆分 CSV 文件,您可以简单地使用 gawk为此:

假设您的 key 位于第二列 $2 (如果您的 key 列位于第一列,则更改 $2 --> $1 )...

prg.awk

{
key = $2
print > "D:/Technical_Data_by_Date/"key".csv"
}

命令:

gawk -F"," -f prg.awk final.csv

它的工作速度快得多

如果您无论如何想使用 python + pandas - 请确保您读取输入的 CSV 文件(目前您执行键数 + 1 次,即约 601 次):

import pandas as pd

fn = 'D:/Technical_Data/final.csv'
sep=','
out_path = 'D:/Technical_Data_by_Date'
chunk_size = 20000
key_col_idx = 0

reader = pd.read_csv(fn, sep=sep, chunksize=chunk_size)

for chunk in reader:
# loop through keys
for key in chunk.iloc[:, key_col_idx].unique():
# writing (appending: mode='a') data to CSV files (by key)
chunk[chunk.iloc[:, key_col_idx] == key] \
.to_csv('{0}/{1}.csv'.format(out_path, key),
mode='a', header=None, index=False)

PS 技巧是在调用 .to_csv() 方法时使用 mode='a' 参数,这会将数据附加到 CSV 文件而不是覆盖它

PPS 与 AWK 解决方案相比会慢

关于python - 如何加快第一列分割文件的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36381069/

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