按python中列的值拆分大csv文件

Moh*_*OUI 5 python pandas

我有一个csv大文件,我无法在内存中使用python处理.在使用以下逻辑对特定列的值进行分组后,我将其拆分为多个块:

def splitDataFile(self, data_file):

    self.list_of_chunk_names = []
    csv_reader = csv.reader(open(data_file, "rb"), delimiter="|")
    columns = csv_reader.next()

    for key,rows in groupby(csv_reader, lambda row: (row[1])):
        file_name = "data_chunk"+str(key)+".csv"
        self.list_of_chunk_names.append(file_name)

        with open(file_name, "w") as output:
            output.write("|".join(columns)+"\n")
            for row in rows:
                output.write("|".join(row)+"\n")

    print "message: list of chunks ", self.list_of_chunk_names

    return
Run Code Online (Sandbox Code Playgroud)

逻辑正在运行,但速度很慢.我想知道如何优化这个?比如熊猫?

编辑

进一步的解释:我不是在寻找一个简单的分割到相同大小的块(比如每个有1000行),我想用列的值进行拆分,这就是我使用groupby的原因.

Moh*_*OUI 3

我将采用如下所示的方法,其中我将迭代要分割的列的唯一值,以过滤数据块。

def splitWithPandas(data_file, split_by_column):
        values_to_split_by = pd.read_csv(data_file, delimiter="|", usecols=[split_by_column])
        values_to_split_by.drop_duplicates()
        values_to_split_by = pd.unique(values_to_split_by.values.ravel())

        for i in values_to_split_by:
            iter_csv = pd.read_csv(data_file, delimiter="|", chunksize=100000)
            df = pd.concat([chunk[chunk[split_by_column] == i] for chunk in iter_csv])
            df.to_csv("data_chunk_"+i, sep="|", index=False)
Run Code Online (Sandbox Code Playgroud)