亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在日期列上拆分 Pandas 中龐大數據集的最快方法

在日期列上拆分 Pandas 中龐大數據集的最快方法

開滿天機 2021-09-11 13:31:53
我有一個 1400 萬行的 CSV 文件,其中有一個日期列(不是第一列),我想用它來過濾和拆分數據。目前,我正在將其加載到 Pandas 數據框中來執行此操作:df = pd.read_csv(filepath, dtype=str) for date in df['dates'].unique():    subset = df[df['dates'] == date]    subset.to_csv(date + dest_path)有沒有更快的方法來做到這一點?在加載到 Pandas 數據幀之前從 CSV 中過濾掉行提供了一個有趣的解決方案,但不幸的是我要拆分的列不在第一列中。編輯:我純粹需要將 csv 文件拆分為每個日期。生成的 csv 文件將傳遞給另一個團隊。我需要所有的列,我不想更改任何數據,我不需要做任何 groupby。
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

主要問題是將整個數據集讀入內存。通常,對于一個非常大的文件,我需要逐行讀取文件,因為它不適合內存。因此,我拆分了文件,然后才能處理各個部分(使用 Python/pandas、R 或 Stata,它們都將整個數據集加載到內存中)。


要拆分文件,我會從頭開始編寫一個 CSV 閱讀器。如果您不必處理帶引號的字符串中的分隔符,那就不太難了(否則使用regex并不會更難)。使用內置csv模塊可能用更少的代碼(我承認我從未使用過它)。


下面根據變量的值拆分文件。也可以調整代碼以固定行數拆分,過濾,添加或刪除變量......


import sys


def main(arg):

    if len(arg) != 3:

        print("csvsplit infile outfile variable")

        return


    input_name = arg[0]

    output_name = arg[1]

    split_var = arg[2]


    sep = ","

    outfiles = {}


    with open(input_name) as f:

        var = f.readline().rstrip("\r\n").split(sep)

        ivar = {name: i for i, name in enumerate(var)}

        ikey = ivar[split_var]


        for line in f:

            v = line.rstrip("\r\n").split(sep)

            key = v[ikey]

            if key not in outfiles:

                outfiles[key] = open("%s_%s.csv" % (output_name, key), "wt")

                outfiles[key].write(sep.join(var) + "\n")

            outfiles[key].write(line)


    for key, outfile in outfiles.items():

        outfile.close()


main(sys.argv[1:])


查看完整回答
反對 回復 2021-09-11
  • 1 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號