首先,我在这里发现了几个具有相同标题/主题的问题,我已经尝试了建议的解决方案,但没有一个对我有用
这是问题: 我想从一个巨大的 .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 :)
非常感谢。
答案 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)