Hassan Kibirige开发的plydata包借鉴了R dplyr包的语法以及实现了管道函数%>%,并且与该作者另一个包plotnine(类ggplot2语法绘图工具包),本文在于对plydata包语法的入门以及与dplyr包的对比,让对R熟悉的同学(比如我)更好的在python进行数据处理工作。
首先导入包以及数据集,数据集使用经典的nycflights13中的flights,这个数据集在python和R中均有包直接调用
# in R
library(dplyr)
library(nycflights13)
> head(flights)
# A tibble: 6 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2013 1 1 517 515 2 830 819 11 UA 1545 N14228 EWR IAH 227 1400 5 15
2 2013 1 1 533 529 4 850 830 20 UA 1714 N24211 LGA IAH 227 1416 5 29
3 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA JFK MIA 160 1089 5 40
4 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN 183 1576 5 45
5 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL 116 762 6 0
6 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD 150 719 5 58
# ... with 1 more variable: time_hour <dttm>
# in Python
import pandas as pd
import numpy as np
from plydata import *
from nycflights13 import flights
flights.head(6)
Out[]:
year month day dep_time ... distance hour minute time_hour
0 2013 1 1 517.0 ... 1400 5 15 2013-01-01T10:00:00Z
1 2013 1 1 533.0 ... 1416 5 29 2013-01-01T10:00:00Z
2 2013 1 1 542.0 ... 1089 5 40 2013-01-01T10:00:00Z
3 2013 1 1 544.0 ... 1576 5 45 2013-01-01T10:00:00Z
4 2013 1 1 554.0 ... 762 6 0 2013-01-01T11:00:00Z
5 2013 1 1 554.0 ... 719 5 58 2013-01-01T10:00:00Z
[6 rows x 19 columns]
Single Table Verbs
dplyr与plydata的数据处理逻辑为提供一个函数,仅仅执行一种Verb数据处理(data manipulation)。所有的Verbs可以归于以下三类:
- 行
filter()
根据条件筛选行 注:python中为query()
slice()
根据位置选择行arrange()
排列行
- 列
select()
选择制定列rename()
修改列名mutate()
创建新列relocate()
修改列顺序
- 行聚合
summarise()
根据运算方式聚合为一行
Pipe - 管道操作
所有的dplyr与plydata函数均取data frame为第一个参数,所以与之每个函数中放入data frame,管道操作提供了一个数据处理的流水线,通过%>%
和>>
符号实现。
filter()与query()
- 选取数据集中飞行距离小于50英里的航班
# in R
> flights %>% filter(distance < 50)
# A tibble: 1 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time distance hour minute
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2013 7 27 NA 106 NA