首页 🐍Python

1、基本方法

首先,数据仍然用我们一直以来用的张三团伙表。

df

    月份  姓名 性别  应发工资   实发工资  职位
0    1  张三  男  2000   1500  主犯
1    2  张三  男  2000   1000  主犯
2    3  张三  女  2000  15000  主犯
3    4  张三  女  2000   1500  主犯
4    5  张三  女  2000   1500  主犯
5    2  李四  男  1800   1300  从犯
6    3  李四  男  1800   1300  从犯
7    4  李四  男  1800   1300  从犯
8    5  李四  男  1800   1300  从犯
9    1  王五  女  1800   1300  龙套
10   2  王五  女  1800   1300  龙套
11   3  王五  女  1800   1300  龙套
12   4  王五  女  1800   1300  龙套

比如此时我们只想查看性别为男的人员信息:(等式条件)

df[df['性别'] == '男']

   月份  姓名 性别  应发工资  实发工资  职位
0   1  张三  男  2000  1500  主犯
1   2  张三  男  2000  1000  主犯
5   2  李四  男  1800  1300  从犯
6   3  李四  男  1800  1300  从犯
7   4  李四  男  1800  1300  从犯

或者工资大于2000的信息:(不等式条件)

df[df['实发工资']>2000]

   月份  姓名 性别  应发工资   实发工资  职位
2   3  张三  女  2000  15000  主犯

或者所有人员中实发工资大于1400且性别为男的信息:(多条件)

df[(df['实发工资']>1000) & (df['性别'] == '男')]

   月份  姓名 性别  应发工资  实发工资  职位
0   1  张三  男  2000  1500  主犯
5   2  李四  男  1800  1300  从犯
6   3  李四  男  1800  1300  从犯
7   4  李四  男  1800  1300  从犯
8   5  李四  男  1800  1300  从犯

这里简单小结一下,基本的查询规则即是在df后加入查询条件,而这个条件可以是df任意位置的数据。 明白这一点之后,其实就很容易理解其条件查询功能了。

2、高级查询

比如我想找到所有姓张的人的信息:

df[[x.startswith('张') for x in df['姓名']]]

   月份  姓名 性别  应发工资   实发工资  职位
0   1  张三  男  2000   1500  主犯
1   2  张三  男  2000   1000  主犯
2   3  张三  女  2000  15000  主犯
3   4  张三  女  2000   1500  主犯
4   5  张三  女  2000   1500  主犯

这里stratswith方法是Python自带的字符串方法,点这里查看详细说明。

还有一种方法:

criterion = df['姓名'].map(lambda x: x.startswith('张'))

df[criterion]

   月份  姓名 性别  应发工资   实发工资  职位
0   1  张三  男  2000   1500  主犯
1   2  张三  男  2000   1000  主犯
2   3  张三  女  2000  15000  主犯
3   4  张三  女  2000   1500  主犯
4   5  张三  女  2000   1500  主犯

3、 可用于修改内容的where方法

df.where(df['性别'] == '男')

     月份   姓名   性别    应发工资    实发工资   职位
0   1.0   张三    男  2000.0  1500.0   主犯
1   2.0   张三    男  2000.0  1000.0   主犯
2   NaN  NaN  NaN     NaN     NaN  NaN
3   NaN  NaN  NaN     NaN     NaN  NaN
4   NaN  NaN  NaN     NaN     NaN  NaN
5   2.0   李四    男  1800.0  1300.0   从犯
6   3.0   李四    男  1800.0  1300.0   从犯
7   4.0   李四    男  1800.0  1300.0   从犯
8   5.0   李四    男  1800.0  1300.0   从犯
9   NaN  NaN  NaN     NaN     NaN  NaN
10  NaN  NaN  NaN     NaN     NaN  NaN
11  NaN  NaN  NaN     NaN     NaN  NaN
12  NaN  NaN  NaN     NaN     NaN  NaN

这里where的使用和直接访问标签的方式就有所不同了,这是将所有满足条件的项保持原状,而其它项全部设为NaN。如果要替换数据的话,需要比较复杂的表达式,这里只看一个简单的例子:

dates = pd.date_range('1/1/2000', periods=8)

df = pd.DataFrame(np.random.randn(8, 4),index=dates, columns=['A', 'B', 'C', 'D'])

df.where(df < 0, -df)

                   A         B         C         D
2000-01-01 -2.843891 -0.140803 -1.816075 -0.248443
2000-01-02 -0.195239 -1.014760 -0.621017 -0.308201
2000-01-03 -0.773316 -0.411646 -1.091336 -0.486160
2000-01-04 -1.753884 -0.596536 -0.273482 -0.685287
2000-01-05 -1.125159 -0.549449 -0.275434 -0.861960
2000-01-06 -1.059645 -1.600819 -0.085352 -0.406073
2000-01-07 -1.692449 -1.767384 -0.266578 -0.593165
2000-01-08 -0.163517 -1.645777 -1.509307 -0.637490

4、条件检索进阶:快速的查询方法`query

df.query('姓名>性别')

    月份  姓名 性别  应发工资   实发工资  职位
2    3  张三  女  2000  15000  主犯
3    4  张三  女  2000   1500  主犯
4    5  张三  女  2000   1500  主犯
9    1  王五  女  1800   1300  龙套
10   2  王五  女  1800   1300  龙套
11   3  王五  女  1800   1300  龙套
12   4  王五  女  1800   1300  龙套

这里,字符串的比较可以查看Python的字符串比较。当然,这里可以看到,query方法主要还是用于列的比较。

query方法的条件处理

MultiIndex情况下的处理

get方法

lookup方法

透视+统计

df.pivot(columns = '姓名',values = '实发工资').sum()




文章评论

目录