当前位置: 首页 > 后端技术 > Python

使用pandas筛选出指定列值对应的行

时间:2023-03-26 14:25:26 Python

在pandas中如何实现类似mysql搜索语句的功能:select*fromtablewherecolumn_name=some_value;在pandas中有几种获取数据的方法:BooleanindexpositionIndexTabIndex使用API假设以下数据:importpandasaspdimportnumpyasnpdf=pd.DataFrame({'A':'foobarfoobarfoobarfoofoo'.split(),'B':'一一二三二二一三'.split(),'C':np.arange(8),'D':np.arange(8)*2})booleanindex这种方法其实就是在每一行中找出符合条件的值(truevalue),比如找出A列的所有值都等于foodf[df['A']=='foo']#判断是否相等。位置索引使用iloc方法根据索引的位置查找数据。这个例子需要找出符合条件的行的位置mask=df['A']=='foo'pos=np.flatnonzero(mask)#returnsarray([0,2,4,6,7])df.iloc[pos]#iloc的常用用法df.iloc[:3,1:3]labelindex如果DataFrame的行和列都有标签,如何使用loc方法。df.set_index('A',append=True,drop=False).xs('foo',level=1)#xs方法适用于多索引DataFrames的数据过滤#更直观的做法df.index=df['A']#使用列A作为DataFrame的行索引df.loc['foo',:]#使用布尔值df.loc[df['A']=='foo']使用APIpd.DataFrame.query方法在数据量大的时候,效率比常规方法更高效。df.query('A==”foo”')#多条件df.query('A==”foo”|A==”bar”')提取数据不限于上述情况,第一种答案是给出以下常见情况:1.过滤掉列值等于标量的行,使用==df.loc[df['column_name']==some_value]2.过滤掉列值等于标量的行属于某个范围,使用isindf.loc[df['column_name'].isin(some_values)]#some_values是一个可迭代对象3.限制多个条件时使用&,&的优先级高于>=或<=,所以要注意括号使用df.loc[(df['column_name']>=A)&(df['column_name']<=B)]4.过滤掉列值的行不等于某些/某些值df.loc[df['column_name']!='some_value']df.loc[~df['column_name'].isin('some_values')]#~Negative如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路也可以扫描下方二维码,加我WeCh在公众号