Python-pandas“read_csv”没有读取整个 .TXT 文件

时间:2021-05-24 14:03:32

标签: python pandas csv bigdata

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

这是问题: 我想从一个巨大的 .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 :)

非常感谢。

1 个答案:

答案 0 :(得分:0)

您无法将 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)
相关问题