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