在加载到pandas数据帧之前过滤掉CSV中的行

iba*_*bav 4 python csv python-2.7 pandas

我有一个大的csv文件,由于内存问题我无法使用read_csv()加载到DataFrame中.但是在csv的第一列中有一个{0,1}标志,我只需要加载一个'1'的行,它很容易小到足以放入DataFrame.有没有办法用条件加载数据,或者在加载之前操纵csv(类似于grep)?

piR*_*red 7

您可以使用pd.read_csv小号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
Run Code Online (Sandbox Code Playgroud)

您还可以使用chunksizepd.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
Run Code Online (Sandbox Code Playgroud)

  • @juanpa.arrivillaga你在说什么,就像它打算用的那样:-) (2认同)