如何使用`.split()`从大的`gzip`文件导入制表符分隔的文本?大块?

时间:2016-09-02 05:31:55

标签: python pandas dataframe split gzip

我有大量gzip文件(几GB)制表符分隔文本,我想将其解析为pandas数据帧。

如果此文件的内容是文字,则只需使用.split(),例如

file_text = """abc   123   cat   456   dog   678   bird   111   fish   ...
moon   1969    revolution    1789   war   1927   reformation    1517    maxwell   ..."""

data = [line.split() for line in file_text.split('\n')]

然后您可以使用

将数据放入pandas数据框中
import pandas as pd
df = pd.DataFrame(data)

但是,这不是文本文件。它是gzip中以制表符分隔的文件,具有数GB的数据。使用.split()将此数据解析为数据框的最有效方法是什么?

我想第一步就是使用

import gzip
with gzip.open(filename, 'r') as f:
    file_content = f.read()

并在.split()上使用file_content,但将所有GB保存到单个变量然后拆分效率会很低。是否可以在“块”中执行此操作?

1 个答案:

答案 0 :(得分:1)

<input pattern="^(|>=\d+$|<=\d+$|>\d+$|<\d+$|\d+$|<> \d+$|<> \d+ to \d+$|\d+ to \d+)$"> <script> var input = document.querySelector("input[pattern]") input.onfocus = input.oninput = function() { this.classList.toggle("clear", this.value.length === 0) } </script>支持read_csv() ped文件,因此您只需执行以下操作:

GZIP

如果您确定自己拥有TSV( TAB 分隔文件),则可以使用for chunk in pd.read_csv('/path/to/file.csv.gz', sep='\s*', chunksize=10**5): # process chunk DF