前言

R上dplyr包很著名,主要做EDA,一行代码分析完的思路非常优秀,但是有几个团队python都开发了类dplyr,有一个是Coursera团队开发(pandas-ply),因此不用担心维护,另一个逼近原作,但是维护团队有点怕gg了,只能说take risk了。

安装

pip install dplython

测评

In [4]:
import pandas as pd
from dplython import (DplyFrame, X, diamonds, select, sift,
  sample_n, sample_frac, head, arrange, mutate, group_by,
  summarize, DelayFunction)

diamonds数据表已经内置,所以直接调用就好了。

In [6]:
type(diamonds)
Out[6]:
dplython.dplython.DplyFrame

看来是已经内置了格式了!

In [9]:
diamonds >> head()
Out[9]:
Unnamed: 0 carat cut color clarity depth table price x y z
0 1 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
1 2 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
2 3 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
3 4 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63
4 5 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75

select

In [12]:
diamonds >> select(X.carat) >> head()
Out[12]:
carat
0 0.23
1 0.21
2 0.23
3 0.29
4 0.31

sift (filter)

In [15]:
diamonds >> sift(X.carat > X.carat.mean()) >> head()
Out[15]:
Unnamed: 0 carat cut color clarity depth table price x y z
91 92 0.86 Fair E SI2 55.1 69.0 2757 6.45 6.33 3.52
97 98 0.96 Fair F SI2 66.3 62.0 2759 6.27 5.95 4.07
99 100 0.80 Premium H SI1 61.5 58.0 2760 5.97 5.93 3.66
104 105 0.80 Ideal I VS1 62.9 56.0 2760 5.94 5.87 3.72
106 107 0.80 Premium G SI1 63.0 59.0 2760 5.90 5.81 3.69

sample_n

In [17]:
diamonds >> sample_n(5)
Out[17]:
Unnamed: 0 carat cut color clarity depth table price x y z
33070 33071 0.32 Ideal H IF 61.6 54.0 814 4.41 4.49 2.74
39422 39423 0.41 Ideal F VS1 61.8 56.0 1076 4.79 4.75 2.95
41308 41309 0.57 Premium I VS1 61.6 58.0 1212 5.33 5.28 3.27
13143 13144 1.33 Premium H SI2 61.0 59.0 5437 7.10 7.06 4.32
11237 11238 1.01 Premium H SI1 60.0 58.0 4965 6.60 6.54 3.94

arrange

In [20]:
diamonds >> arrange(X.carat) >> head()
Out[20]:
Unnamed: 0 carat cut color clarity depth table price x y z
31593 31594 0.2 Premium E VS2 61.1 59.0 367 3.81 3.78 2.32
31597 31598 0.2 Ideal D VS2 61.5 57.0 367 3.81 3.77 2.33
31596 31597 0.2 Premium F VS2 62.6 59.0 367 3.73 3.71 2.33
31595 31596 0.2 Ideal E VS2 59.7 55.0 367 3.86 3.84 2.30
31594 31595 0.2 Premium E VS2 59.7 62.0 367 3.84 3.80 2.28

mutate 神级函数

In [23]:
diamonds >> mutate(caratsq = X.carat ** 2) >> select(X.carat,X.caratsq) >> head()
Out[23]:
carat caratsq
0 0.23 0.0529
1 0.21 0.0441
2 0.23 0.0529
3 0.29 0.0841
4 0.31 0.0961

group_bysummarize

In [27]:
diamonds >> group_by(X.color) >> summarize(mean_carat = X.carat.mean())
Out[27]:
color mean_carat
0 D 0.657795
1 E 0.657867
2 F 0.736538
3 G 0.771190
4 H 0.911799
5 I 1.026927
6 J 1.162137

参考