对于一个DataFrame,常常需要筛选出某列为指定值的行。
pandas中获取数据的有以下几种方法:
- 布尔索引
- 位置索引
- 标签索引
- 使用API
假设df数据如下:
import pandas as pd
import numpy as np
df = pd.DataFrame({'code': '000001.SZ 000002.SZ 000006.SZ 000009.SZ'.split(),
'open': '1.2 20 3.5 2.8'.split(),
'close': np.arange(4),
'high': np.arange(4) * 2})
数据如下:
>>> df
code open close high
0 000001.SZ 1.2 0 0
1 000002.SZ 20 1 2
2 000006.SZ 3.5 2 4
3 000009.SZ 2.8 3 6
问题如下:
找出符合条件的所有行,即条件判断bool值为true,如找出code为000002.SZ的行:
df[df['code'] == '000002.SZ']
这会列出所有使得条件 df[‘code’] == ‘000002.SZ’ 为true的所有行,输出如下:
>>> df[df['code'] == '000002.SZ']
code open close high
1 000002.SZ 20 1 2
使用iloc方法,根据索引的位置来查找数据的。这个例子需要先找出符合条件的行所在位置。
mask = df['code'] == '000002.SZ'
pos = np.flatnonzero(mask)
df.iloc[pos]
df.iloc[1:2]
输出与之前相同。
适用于DataFrame的行列都是有标签的情形。
结果如下:
>>> df.loc['000002.SZ', :]
code 000002.SZ
open 20
close 1
high 2
Name: 000002.SZ, dtype: object
>>>
>>> df.loc[df['code']=='000002.SZ']
code open close high
code
000002.SZ 000002.SZ 20 1 2
适用于数据量比较大的情形,方法为:pd.DataFrame.query。
df.query('code=="000002.SZ"')
df.query('code=="000002.SZ" | code=="000006.SZ"')
结果如下:
>>> df.query('code=="000002.SZ"')
code open close high
code
000002.SZ 000002.SZ 20 1 2
>>>
>>> # 多条件
>>> df.query('code=="000002.SZ" | code=="000006.SZ"')
code open close high
code
000002.SZ 000002.SZ 20 1 2
000006.SZ 000006.SZ 3.5 2 4
除了上面判断相等的情况,也可以结合条件判断一起使用。
df.loc[df['column_name'] != 'some_value']
df.loc[~df['column_name'].isin('some_values')]
df功能强大,且用且总结。
https://www.cnblogs.com/small-bud/p/12380357.html
Original: https://blog.csdn.net/guotianqing/article/details/119917236
Author: guotianqing
Title: DataFrame筛选出指定列值的行
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/673968/
转载文章受原作者版权保护。转载请注明原作者出处!