我有一个大的csv文件,由于内存问题我无法使用read_csv()加载到DataFrame中。但是在csv的第一列中有一个{0,1}标志,我只需要加载一个'1'的行,它很容易小到足以放入DataFrame。有没有办法用条件加载数据,或者在加载之前操纵csv(类似于grep)?
答案 0 :(得分:7)
您可以使用pd.read_csv
s 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_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