df.query的使用和df.loc方法对比

使用df.query()方法筛选DataFrame数据,要比loc方法来的简洁

常用方法

# 常用筛选
df.query('节庆=="夏季"')

#loc方法对比
df.loc[df['节庆']=="夏季"]

数学表达式

#  数学表达式 > , +  - * 
df.query('总数量>10000').head()

#loc方法对比
df.loc[df['总数量']>10000].head()

通过变量筛选

# 通过变量筛选
season = "春节"
df.query('节庆==@season').head()

列表筛选

# 列表筛选 in not in 
df.query('节庆 in ["夏季","春节"]')

#loc方法对比
df.loc[df['节庆'].isin(["夏季","春节"])]

使用in 和not in

多条件筛选

# 多条件筛选 and or | & 
df.query('节庆=="夏季" & 合格 > 2000')

#loc方法对比
df.loc[(df['节庆']=="夏季") & (df['合格']>2000)]

注意列名称有空格的情况

df.query("`this year` < 5 ")

使用反引号

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import pandas as pd import datetime #将数据作存储并且设置前三列为合适的索引 df = pd.read_csv('wind.data',sep='\s+',parse_dates=[[0,1,2]]) #2061年?我们真的有这一年的数据?创建一个函数并用它去修复这个bug def fix_century(x): year = x.year - 100 if x.year>1999 else x.year return datetime.date(year,x.month,x.day) df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century) #将日期设为索引,注意数据类型,应该是datetime64[ns] df['Yr_Mo_Dy'] = pd.to_datetime(df['Yr_Mo_Dy']) df = df.set_index('Yr_Mo_Dy') #对应每一个location,一共有多少数据值缺失 df.isnull().sum() #对应每一个location,一共有多少完整的数据值 df.shape[1] - df.isnull().sum() #对于全体数据,计算风速的平均值 df.mean().mean() #创建一个名为loc_stats的数据框去计算并存储每个location的风速最小值,最大值,平均值和标准差 loc_stats = pd.DataFrame() loc_stats['min'] = df.min() loc_stats['max'] = df.max() loc_stats['mean'] = df.mean() loc_stats['std'] = df.std() #创建一个名为day_stats的数据框去计算并存储所有天的风速最小值,最大值,平均值和标准差 day_stats = pd.DataFrame() day_stats['min'] = df.min(axis=1) day_stats['max'] = df.max(axis=1) day_stats['mean'] = df.mean(axis=1) day_stats['std'] = df.std(axis=1) #对于每一个location,计算一月份的平均风速 df['date'] = df.index df['year'] = df['date'].apply(lambda df: df.year) df['month'] = df['date'].apply(lambda df: df.month) df['day'] = df['date'].apply(lambda df: df.day) january_winds = df.query('month ==1') #query等同于df[df.month==1] january_winds.loc[:,'RPT':'MAL'].mean() #对于数据记录按照年为频率取样 df.query('month ==1 and day == 1') #对于数据记录按照月为频率取样 df.query('day == 1')
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值