使用 siuba 处理 DataFrame

siuba 是一个语法上类似 dplyr 的 python包,能够用链式语法处理 pandas 的数据结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from siuba import *

# 选择
select("stack.loss","Water.Temp") # 引号取列
select(_.bin) # _.取列(缺点:列名不能包含. _)
select(-_.bin) # 负向取列
select(_["mpg": "hp"]) # 范围取列
select(_.contains('d')) # 包含取列

# 过滤
filter(_["stack.loss"]>20) # _[]取列
filter(_.bin>20)
filter(_.hp > _.hp.mean())
filter((_["stack.loss"]>20) | (_["stack.loss"]<40)) # 或运算 需要把条件用括号包围
filter((_["stack.loss"]>20) & (_["stack.loss"]<40)) # 并预算
filter(_["stack.loss"]>20, _["stack.loss"]<40) # 并预算,使用逗号可以不加括号

# 新列
mutate(hp=_["stack.loss"]-_["Water.Temp"])
mutate(hp=_["stack.loss"].mean())

# 分组
group_by(_["Water.Temp"])
group_by(_.cyl, _.gear)
group_by(high_hp = _.hp > 300) #定义分组新列 hp大小于300为分组条件

# 总结
summarize(count=_["Water.Temp"].count()) #一般配合group_by使用

# 链式操作符
>>
file>>group_by(_["Water.Temp"])>>summarize(x=_["Water.Temp"].count())