0.25 版本开始支持 query
方法,可读性上又获得大幅提升,类似 sql 查询数据的写法,更加人性化。
下面举例说明,过滤数据常用三种方法。
df = pd.DataFrame({'A':np.random.randint(1,20,(8,)),
'B':np.random.randint(1,20,(8,)),
'C':np.random.randint(1,20,(8,))})
df
过滤条件:A列值大于其平均值,且 B列值大于 5 的行
方法 1
df[ (df['A'] > df["A"].mean()) & (df['B'] > 5)]
注意,&
前后必须要各自加一对 ()
方法 2
cr1 = df['A'] > df["A"].mean()
cr2 = df['B'] > 5
df[cr1 & cr2]
方法 3
mean = df["A"].mean()
df.query("A > @mean & B > 5")
query 是今天重点提到的,使用语法规则见上,变量前添加 @
。这种语法的可读性大家觉得怎么样?
顺便提一下,如果列的名称中间有空格,有一个特别的语法,使用一对 ``
符号来标记列名:
df = pd.DataFrame({'First Name':['Jack','Mary','Mike']})
df.query('`First Name` == \'Jack\'')
以上三种方法得到结果都为:
首先读入数据:
df = pd.read_csv("IMDB-Movie-Data.csv")
df
1000 行数据,genre
取值的频次统计如下:
vc = df["genre"].value_counts()
vc
打印结果:
Action,Adventure,Sci-Fi 50
Drama 48
Comedy,Drama,Romance 35
Comedy 32
Drama,Romance 31
..
Adventure,Comedy,Fantasy 1
Biography,History,Thriller 1
Action,Horror 1
Mystery,Thriller,Western 1
Animation,Fantasy 1
Name: genre, Length: 207, dtype: int64
筛选出 top3 的 index:
top_genre = vc[0:3].index
print(top_genre)
打印结果:
Index(['Action,Adventure,Sci-Fi', 'Drama', 'Comedy,Drama,Romance'], dtype='object')
使用得到的 top3 的 index ,结合 isin
,选择出相应的 df
df_top = df[df["genre"].isin(top_genre)]
df_top
结果:
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!