非常大的制表符分隔文本文件的列选择
Column selection for very large tab-delimited text files
我正在处理一个非常大的制表符分隔(大约 20000 行 * 30000 列)table .txt 格式,这使得文件大于 20GB。我检查了桌面的 RAM,似乎无法直接使用 R 中的 read.delim 或 python 中的 pandas 来读取文件。我目前正在考虑根据列的过滤器制作 table 的一小部分,新的文本文件将是 20000 行 * 1200 列。我已经将目标文件的列名保存在另一个文件中,我想我的下一步只是检查原始文件中给定列的列名是否在我的新列表中,并根据它对数据框进行子集化。我的问题是如何最简洁地进行此过滤?
我知道pandas中有一个分块的方法,但在我看来,它更多的是根据特定的行数切割数据框。我一直在研究的 bash 脚本也是关于基于行的切片。如果有人可以建议一种基于列名而不是行 names/numbers 过滤大型数据框的简洁方法,我将非常感激。如果可能的话,我更期待基于python的解决方案(也欢迎R或bash)。
假设您想要的列是第 5 列,只需按如下所示一次一行地处理文件。
output = list()
with open('yourfile.txt', 'r') as _f:
for line in _f:
output.append(line.split(',')[4])
print(output)
我正在处理一个非常大的制表符分隔(大约 20000 行 * 30000 列)table .txt 格式,这使得文件大于 20GB。我检查了桌面的 RAM,似乎无法直接使用 R 中的 read.delim 或 python 中的 pandas 来读取文件。我目前正在考虑根据列的过滤器制作 table 的一小部分,新的文本文件将是 20000 行 * 1200 列。我已经将目标文件的列名保存在另一个文件中,我想我的下一步只是检查原始文件中给定列的列名是否在我的新列表中,并根据它对数据框进行子集化。我的问题是如何最简洁地进行此过滤?
我知道pandas中有一个分块的方法,但在我看来,它更多的是根据特定的行数切割数据框。我一直在研究的 bash 脚本也是关于基于行的切片。如果有人可以建议一种基于列名而不是行 names/numbers 过滤大型数据框的简洁方法,我将非常感激。如果可能的话,我更期待基于python的解决方案(也欢迎R或bash)。
假设您想要的列是第 5 列,只需按如下所示一次一行地处理文件。
output = list()
with open('yourfile.txt', 'r') as _f:
for line in _f:
output.append(line.split(',')[4])
print(output)