根据Python中的列值筛选大型csv文件(10GB+;)

根据Python中的列值筛选大型csv文件(10GB+;),python,pandas,csv,filter,Python,Pandas,Csv,Filter,编辑:增加了复杂性 我有一个很大的csv文件,我想根据列值筛选出行。例如,考虑以下CSV文件格式: Col1,Col2,Nation,State,Col4... a1,b1,Germany,state1,d1... a2,b2,Germany,state2,d2... a3,b3,USA,AL,d3... a3,b3,USA,AL,d4... a3,b3,USA,AK,d5... a3,b3,USA,AK,d6... 我想用Nation==“USA”过滤所有行,然后基于50个州中的每一个。最有

编辑:增加了复杂性

我有一个很大的csv文件,我想根据列值筛选出行。例如,考虑以下CSV文件格式:

Col1,Col2,Nation,State,Col4...
a1,b1,Germany,state1,d1...
a2,b2,Germany,state2,d2...
a3,b3,USA,AL,d3...
a3,b3,USA,AL,d4...
a3,b3,USA,AK,d5...
a3,b3,USA,AK,d6...
我想用
Nation==“USA”
过滤所有行,然后基于50个州中的每一个。最有效的方法是什么?我正在使用Python。谢谢

此外,对于此类任务,R是否优于Python?

使用或:

或:

第二个应该更快,请参见

如果仍然不可能(内存不是很多),请尝试使用Jon Clements(谢谢)。

使用或:

或:

第二个应该更快,请参见


如果仍然不可能(没有太多RAM),请尝试使用评论过的Jon Clements(谢谢)。

一种方法是先过滤csv,然后根据数据大小加载

import csv
with open('yourfile.csv', 'r') as f_in:
    with open('yourfile_edit.csv', 'w') as f_outfile:
        f_out = csv.writer(f_outfile, escapechar=' ',quoting=csv.QUOTE_NONE)

        for line in f_in:
            line = line.strip()
            row = []
            if 'Japan' in line:
                row.append(line)
                f_out.writerow(row)
现在加载csv

df = pd.read_csv('yourfile_edit.csv', sep = ',',header = None)      
你得到

    0   1   2   3       4
0   2   a3  b3  Japan   d3

一种方法是先过滤csv,然后根据数据的大小进行加载

import csv
with open('yourfile.csv', 'r') as f_in:
    with open('yourfile_edit.csv', 'w') as f_outfile:
        f_out = csv.writer(f_outfile, escapechar=' ',quoting=csv.QUOTE_NONE)

        for line in f_in:
            line = line.strip()
            row = []
            if 'Japan' in line:
                row.append(line)
                f_out.writerow(row)
现在加载csv

df = pd.read_csv('yourfile_edit.csv', sep = ',',header = None)      
你得到

    0   1   2   3       4
0   2   a3  b3  Japan   d3

您可以打开文件,为
Nation
标题的位置编制索引,然后在
阅读器()上迭代


您可以打开文件,为
Nation
标题的位置编制索引,然后在
阅读器()上迭代


如果机器可以处理加载到筛选器的10gb文件。。。是 啊否则,请直接循环并检查,或者查看
dask.dataframe
…如果机器能够处理加载到筛选器的10gb文件。。。是 啊否则直接循环并检查,或者查看
dask.dataframe
。。。