Python 在加载到数据帧之前,从CSV中筛选出行

Python 在加载到数据帧之前,从CSV中筛选出行,python,python-2.7,csv,pandas,Python,Python 2.7,Csv,Pandas,我有一个很大的csv文件,由于内存问题,无法使用read_csv()将其加载到数据帧中。然而,在csv的第一列中有一个{0,1}标志,我只需要加载带有“1”的行,它很容易小到足以容纳一个数据帧。是否有任何方法可以加载带有条件的数据,或在加载csv之前对其进行操作(类似于grep)?您可以使用comment参数并将其设置为'0' import pandas as pd from io import StringIO txt = """col1,col2 1,a 0,b 1,c 0,d""" p

我有一个很大的csv文件,由于内存问题,无法使用read_csv()将其加载到数据帧中。然而,在csv的第一列中有一个{0,1}标志,我只需要加载带有“1”的行,它很容易小到足以容纳一个数据帧。是否有任何方法可以加载带有条件的数据,或在加载csv之前对其进行操作(类似于grep)?

您可以使用
comment
参数并将其设置为
'0'

import pandas as pd
from io import StringIO

txt = """col1,col2
1,a
0,b
1,c
0,d"""

pd.read_csv(StringIO(txt), comment='0')

   col1 col2
0     1    a
1     1    c
您还可以使用
chunksize
pd.read\u csv
转换为迭代器,并使用
query
pd.concat
注意:正如OP所指出的,
1
的块大小是不现实的。我只是出于演示的目的使用它。请根据个人需要增加

pd.concat([df.query('col1 == 1') for df in pd.read_csv(StringIO(txt), chunksize=1)])
# Equivalent to and slower than... use the commented line for better performance
# pd.concat([df[df.col1 == 1] for df in pd.read_csv(StringIO(txt), chunksize=1)])

   col1 col2
0     1    a
2     1    c

你可以很容易地在那个列上过滤一个新的CSV,不是吗?@ Juanga.AviviaGa,你在说什么,就像它打算使用的那样:-)我试图概括这个问题,但是实际上,我在文档的中间使用了一个字符串。comment字段准确地回答了我的问题,但它的局限性在于它只适用于文件开头的单个字符。concat解决方案非常有效,尽管我增加了chunksize-1的速度太慢了。我还需要添加low_memory=False来解决一些数据类型的问题。mtms=pd.concat([df.query('Pool='FX')用于pd.read中的df\u csv(mtms,chunksize=1000,low\u memory=False)]@ibav Yes!请增加区块大小<代码>1
用于演示目的。