簡體   English   中英

如何通過 csv 文件中的塊在巨大的 tar.gz 中獲取 pandas dataframe 而不解壓縮和迭代它們?

[英]How to get pandas dataframe by chunks from csv files in huge tar.gz without unzipping and iterating over them?

我有一個巨大的壓縮文件,我對讀取各個數據幀感興趣,以免用完 memory。

另外,由於時間和空間的關系,我無法解壓.tar.gz。

這是我到目前為止的代碼:

import pandas as pd
# With this lib we can navigate on a compressed files
# without even extracting its content
import tarfile
import io

tar_file = tarfile.open(r'\\path\to\the\tar\file.tar.gz')

# With the following code we can iterate over the csv contained in the compressed file
def generate_individual_df(tar_file):
    return \
        (
            (
                member.name, \
                pd.read_csv(io.StringIO(tar_file.extractfile(member).read().decode('ascii')), header=None)
            )
               for member in tar_file
                   if member.isreg()\
        )

for filename, dataframe in generate_individual_df(tar_file):
    # But dataframe is the whole file, which is too big

嘗試了如何從壓縮在 tar.gz 中的 csv 創建 Panda Dataframe? 但還是解決不了...

您可以使用 glob 模塊使用 glob 獲取 zip 中的某些文件,例如我希望 cv2 讀取文件中的圖像

 import glob
 import cv2
    
    file1 = glob.glob(filepath/ "*.extension")
    for image in file1:
       image = cv2.imread(image)
hope it works

實際上,您可以使用以下 function 遍歷壓縮文件中的塊:

def generate_individual_df(tar_file, chunksize=10**4):
    return \
        (
            (
                member.name, \
                chunk
            )
            for member in tar_file
                if member.isreg()\
                for chunk in pd.read_csv(io.StringIO(tar_file.extractfile(member)\
                  .read().decode('ascii')), header=None, chunksize=chunksize)
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM