我正在尝试在 Pandas 中读取 csv 文件。数据如下:
Date Value Valid
23/05/2018 12 Yes
24/05/2018 13 No
25/05/2018 45 No
26/05/2018 11 Yes
27/05/2018 66 Yes
28/05/2018 50 No
29/05/2018 34 Yes
30/05/2018 27 No
我只想读取 Valid 列的输入值为 Yes 的行。这样做的最佳方法是什么?
我想在阅读之前而不是在阅读之后过滤它。
最佳答案
您不能在阅读之前忽略行。
相反,您可以在读取数据后进行过滤:
# read file to dataframe
df = pd.read_csv('file.csv')
# apply mask to dataframe
df = df[df['Valid'] == 'Yes']
如果您遇到内存问题,例如,有大量“否”行,读入内存的成本很高,您可以分块。一种方便的静默分块方法是
dask.dataframe
:import dask.dataframe as dd
# create lazy reader object
df = dd.read_csv('file.csv')
# define filtering logic
df = df[df['Valid'] == 'Yes']
# apply filtering logic and convert to pandas dataframe
df = df.compute()
请注意,在上面的示例中,直到最后一行才涉及计算工作,其中
dask
获取块、过滤器,然后将结果聚合到常规 pandas
数据帧。关于python - Skiprow 条件基于值而不是 Pandas 中的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50606882/