【问题标题】:Python-pandas "read_csv" is not reading the whole .TXT filePython-pandas“read_csv”没有读取整个 .TXT 文件
【发布时间】:2021-08-12 20:07:45
【问题描述】:

首先,我在这里找到了几个标题/主题相同的问题,我尝试了建议的解决方案,但没有一个对我有用

这是问题: 我想从一个巨大的 .txt 文件(> 50 GB)中提取工人样本 为此,我正在使用 HPC 集群。

数据中的每一行代表一个具有许多信息(列变量)的工人。这个想法是根据 ID 变量中的前两个字母提取工人的子样本:

df = pd.read_csv('path-to-my-txt-file', encoding= 'ISO-8859-1', sep = '\t', low_memory=False, error_bad_lines=False, dtype=str)
df = df.rename(columns = {'Worker ID' : 'worker_id'})

# extract subsample based on first 2 lettter in worker id
new_df = df[df.worker_id.str.startswith('DK', na=False)]
new_df.to_csv('DK_worker.csv', index = False)

问题是生成的 .CSV 文件只有应该存在的行数的 10-15%(我有另一个关于我应该存在的大致行数的信息来源期待)。

我认为数据存在一些编码问题。我尝试过类似 'utf-8'、'latin_1' .. 没有任何改变。

您是否发现此代码中有任何错误可能导致此问题?我错过了一些争论吗?

我不是 Python 专家t :)

非常感谢。

【问题讨论】:

    标签: python pandas csv bigdata


    【解决方案1】:

    您无法将 50GB 的文件加载到您的计算机 RAM 中,因此无法存储那么多数据。而且我怀疑 csv 模块可以处理那种大小的文件。您需要做的是将文件分成小块打开,然后处理每一块。

    def process_data(piece):
        # process the chunk ...
    
    def read_in_chunks(file_object, chunk_size=1024):
        while True:
            data = file_object.read(chunk_size)
            if not data:
                break
            yield data
    
    
    with open('path-to-my-txt-file.csv') as f:
        for piece in read_in_chunks(f):
            process_data(piece)
    

    【讨论】:

    • 亲爱的 Jared,感谢您的回复。你完全正确,但是你错过了我上面的一句话,我正在使用 HPC 或高性能计算机集群(256 GB RAM + 28 Core-CPUS),对不起,我必须清楚这一点。我会按照您的建议尝试分块读取文件。
    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 2017-01-31
    • 2019-08-20
    • 2017-11-27
    • 2016-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多