在pandas中基于值而不是索引来跳过行的条件

5

我正在尝试使用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

我想只读取输入值为"是"的有效列中的行。最好的方法是什么?

我想在读取之前进行过滤,而不是之后。


3
读取数据前无法过滤。 - Mohamed Thasin ah
https://dev59.com/NWgv5IYBdhLWcg3wSe0f - BENY
温的链接帖子是读取“一行一次”的示例。当然,这样做是可行的,但我建议您考虑分块,因为您可能这样做的唯一真正原因是优化内存消耗。 - jpp
1个回答

7

在读取行之前,您不能忽略它们。

相反,在读取数据后,您可以进行筛选:

# 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数据帧中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接