数据提取

  1. 使用loc,iloc
  2. df.query()
  3. df.isin()
  4. .str.contains
  5. np.where
  6. 布尔值
  7. 切片

df.loc方法

df.loc[rows,cols]

  • 模糊匹配
cj.loc[cj['货号'].str.contains('EC-')] #模糊匹配
cj_in.rename(columns={'货号':'编码1'}) #改名字
  • loc
cj_in.loc[15]   #按单行
cj_out.loc[0:3] #提取前面3行数据
 
cj_in.loc[cj_in['货号']=='Jc-7901'] #按值搜索
 
#多条件,要用()起来
(tb['货号']== self.huohao) & (tb['是否有效'] == 1) 
  • iloc
df.iloc[[0],[1]]  #如提取第1行,第2列的值:
 
df.iloc[[0],[1]]  #则会返回一个df,即有字段名和行号。
 
df.iloc[[0],[1]].values  #返回的值会是列表,而且是嵌套列表:
 
df.iloc[[0],[1]].values[0][0]
  • 多条件查询
df_cha = df[(df['日期']==res_day)& (df['盈亏数量']>0)]

df.query 函数

单条件查询

cj_in.query('货号== "AC-5311"')

多条件查询

# 多条件筛选 and or | & 
df.query('节庆=="夏季" & 合格 > 2000')
 
#loc方法对比
df.loc[(df['节庆']=="夏季") & (df['合格']>2000)]

使用外部输入查询

# 使用外部输入查询
start_date =input("起始日期")
end_date = input("结束日期")
dh_week = df.loc[((df['入库类型']=='进货入库')&(df['记账日期']<=end_date)&(df['记账日期']>=start_date)),['记账日期','箱数','金额','体积']].groupby('记账日期').sum()  #.loc筛选数据,.groupby 按日期分类汇总
dh_week.loc['合计']=dh_week.apply(lambda x: x.sum()) #添加合计行
r1 = dh_week.loc['合计']
  • 添加合计行
dh_week.loc['合计']=dh_week.apply(lambda x: x.sum()) #添加合计行
r1 = dh_week.loc['合计']

注意列名称有空格的情况

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

使用反引号

  • 查询INDEX的问题
    date1 = input("输入日期:")
    res1 = tb.loc[[date1]]
  • df.isin()
 data[data['A'].isin([4,8])] #返回值满足,{A列含有数值[4,8]}

g_two_score[“姓名”].isin([“小白”,“小橙”])#使用isin()函数判断,提取的行数

  • 布尔值取数