So sánh dplyr và pandas cho data manipulation

Package dplyr là một trong những thành phần rất quan trọng trong hệ sinh thái tidyverse của Hadley Wickham - tác giả của các thư viện nổi tiếng trên R như ggplot2, readr, tidyr,…dplyr cung cấp các công cụ biến đổi giúp cho việc thao tác với dữ liệu trên R dễ dàng và thuận tiện hơn bao giờ hết. Kết hợp với toán tử %>%, nhiều người cho rằng dplyr đã tạo ra concept mới cho R.

Để thực hiện các công việc liên quan đến data manipulation chúng ta có thể sử dụng các hàm thuộc gói base trong R, tuy nhiêu cú phát của nhiều hàm base là không nhất quán và khó nhớ, đặc biệt là cho một nhóm công việc đặc biệt tốn thời gian như là data manipulation. Gói hay còn thường được gọi là hệ sinh thái tidyverse ra đời nhằm đáp ứng các nhu cầu ngày càng tăng của việc biến đổi và làm sạch dữ liệu (data cleaning), nó bao gồm tập hợp của những gói mạnh nhất chuyên cho công việc làm sạch và biến đổi dữ liệu. Ưu điểm của việc sử dụng tidyverse phải kể đến các lí do sau:

  • Dễ hiểu và có cú pháp nhất quán.
  • Hợp nhất và hỗ trợ ggplot2 - một gói chuyên cho data visualization.
  • Có thể phân tích, quản lí cơ sở dữ liệu ngoài (external databases) mà không cần biết sâu các chi tiết và kiến thức của các ngôn ngữ truy vấn cơ sở dữ liệu (database query languages) khác như SQL.

Nạp gói tidyverse vào phiên làm việc trên R để thực hiện công việc data manipulation:

# R
library(tidyverse)

Tidyverse là một hộp công cụ lớn chứa nhiều package nhỏ (trong đó có dplyr) bên trong và các mảnh nhỏ này kết nối với nhau một cách tiện ích để vận hành một quy trình phân tích dữ liệu hoàn chỉnh. Hiện nay tidyverse chứa 27 packages bao gồm:

# R
tidyverse_packages()
##  [1] "broom"      "cli"        "crayon"     "dbplyr"     "dplyr"     
##  [6] "forcats"    "ggplot2"    "haven"      "hms"        "httr"      
## [11] "jsonlite"   "lubridate"  "magrittr"   "modelr"     "pillar"    
## [16] "purrr"      "readr"      "readxl"     "reprex"     "rlang"     
## [21] "rstudioapi" "rvest"      "stringr"    "tibble"     "tidyr"     
## [26] "xml2"       "tidyverse"

Trong post này chúng ta hãy cùng so sánh các thao tác data manipulation thường dùng trong data science bằng cách sử dụng R (với dplyr) và sử dụng Python (với pandas):

  • filter: Lọc dữ liệu với các điều kiện của biến (thuộc tính)
  • select: Chọn thuộc tính hay là tập hợp các thuộc tính
  • arrange: Sắp xếp dữ liệu theo thứ t
  • mutate : Tạo thuộc tính mới cho data frameự
  • summarise: Thống kê mô tả theo phân nhóm

Nạp thư viện reticulate:

# R
library(reticulate)

reticulate cho phép chúng ta sử dụng kết hợp R và Python trong môi trường R. Cụ thể về cách sử dụng thư viện này để kết hợp R và Python tôi đã giới thiệu ở post trước, các bạn có thể đọc ở đây

Nạp thư viện pandas trong môi trường R:

# Python
import pandas as pd

Chú ý: Những R code chunks tôi sẽ comment R và Python là Python.

Cũng giống như dplyr trong R, về cơ bản Pandas là một thư viện mã nguồn mở, được cộng đồng đánh giá là high-performance, nó hỗ trợ đắc lực trong thao tác với dữ liệu và giúp cho việc xử lý dữ liệu, tính toán sẽ dễ dàng hơn rất nhiều cách truyền thống trong Python.

Load dữ liệu để demo:

# R
# Nạp R built-in dataset mtcars
data(mtcars)
# Chuyển dữ dữ liệu về dạng tibble(hay còn gọi là data_frame) - đây là 1 
# kiểu cấu trúc dữ liệu mới trong R nhằm đáp ứng nhu cầu về tốc độ tính toán
# khi xử lí dữ liệu có kích thước lớn
data_r <- as_tibble(mtcars)
data_r
## # A tibble: 32 x 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
##  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
##  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
##  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
##  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
##  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
##  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
## 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
## # ... with 22 more rows

So sánh dplyrpandas

1. Filter dữ liệu theo điều kiện của thuộc tính

# R
filter(data_r, cyl >=6 & am == 1)
## # A tibble: 5 x 11
##     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  21       6   160   110  3.9   2.62  16.5     0     1     4     4
## 2  21       6   160   110  3.9   2.88  17.0     0     1     4     4
## 3  15.8     8   351   264  4.22  3.17  14.5     0     1     5     4
## 4  19.7     6   145   175  3.62  2.77  15.5     0     1     5     6
## 5  15       8   301   335  3.54  3.57  14.6     0     1     5     8
# Python
# chuyển dữ liệu từ R cho Python:
data_py = r.data_r
data_py[(data_py['cyl'] >=6) & (data_py['am'] == 1)]
##      mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 0   21.0  6.0  160.0  110.0  3.90  2.620  16.46  0.0  1.0   4.0   4.0
## 1   21.0  6.0  160.0  110.0  3.90  2.875  17.02  0.0  1.0   4.0   4.0
## 28  15.8  8.0  351.0  264.0  4.22  3.170  14.50  0.0  1.0   5.0   4.0
## 29  19.7  6.0  145.0  175.0  3.62  2.770  15.50  0.0  1.0   5.0   6.0
## 30  15.0  8.0  301.0  335.0  3.54  3.570  14.60  0.0  1.0   5.0   8.0
# R
data_r %>% filter(am != 0)
## # A tibble: 13 x 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  21       6 160     110  3.9   2.62  16.5     0     1     4     4
##  2  21       6 160     110  3.9   2.88  17.0     0     1     4     4
##  3  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1
##  4  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1
##  5  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2
##  6  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1
##  7  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1
##  8  26       4 120.     91  4.43  2.14  16.7     0     1     5     2
##  9  30.4     4  95.1   113  3.77  1.51  16.9     1     1     5     2
## 10  15.8     8 351     264  4.22  3.17  14.5     0     1     5     4
## 11  19.7     6 145     175  3.62  2.77  15.5     0     1     5     6
## 12  15       8 301     335  3.54  3.57  14.6     0     1     5     8
## 13  21.4     4 121     109  4.11  2.78  18.6     1     1     4     2
# Python
data_py[data_py['am'] != 0]
##      mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 0   21.0  6.0  160.0  110.0  3.90  2.620  16.46  0.0  1.0   4.0   4.0
## 1   21.0  6.0  160.0  110.0  3.90  2.875  17.02  0.0  1.0   4.0   4.0
## 2   22.8  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0   1.0
## 17  32.4  4.0   78.7   66.0  4.08  2.200  19.47  1.0  1.0   4.0   1.0
## 18  30.4  4.0   75.7   52.0  4.93  1.615  18.52  1.0  1.0   4.0   2.0
## 19  33.9  4.0   71.1   65.0  4.22  1.835  19.90  1.0  1.0   4.0   1.0
## 25  27.3  4.0   79.0   66.0  4.08  1.935  18.90  1.0  1.0   4.0   1.0
## 26  26.0  4.0  120.3   91.0  4.43  2.140  16.70  0.0  1.0   5.0   2.0
## 27  30.4  4.0   95.1  113.0  3.77  1.513  16.90  1.0  1.0   5.0   2.0
## 28  15.8  8.0  351.0  264.0  4.22  3.170  14.50  0.0  1.0   5.0   4.0
## 29  19.7  6.0  145.0  175.0  3.62  2.770  15.50  0.0  1.0   5.0   6.0
## 30  15.0  8.0  301.0  335.0  3.54  3.570  14.60  0.0  1.0   5.0   8.0
## 31  21.4  4.0  121.0  109.0  4.11  2.780  18.60  1.0  1.0   4.0   2.0
# R
data_r %>% group_by(cyl) %>% filter(sum(hp) > 2000)
## # A tibble: 14 x 11
## # Groups:   cyl [1]
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  2  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  3  16.4     8  276.   180  3.07  4.07  17.4     0     0     3     3
##  4  17.3     8  276.   180  3.07  3.73  17.6     0     0     3     3
##  5  15.2     8  276.   180  3.07  3.78  18       0     0     3     3
##  6  10.4     8  472    205  2.93  5.25  18.0     0     0     3     4
##  7  10.4     8  460    215  3     5.42  17.8     0     0     3     4
##  8  14.7     8  440    230  3.23  5.34  17.4     0     0     3     4
##  9  15.5     8  318    150  2.76  3.52  16.9     0     0     3     2
## 10  15.2     8  304    150  3.15  3.44  17.3     0     0     3     2
## 11  13.3     8  350    245  3.73  3.84  15.4     0     0     3     4
## 12  19.2     8  400    175  3.08  3.84  17.0     0     0     3     2
## 13  15.8     8  351    264  4.22  3.17  14.5     0     1     5     4
## 14  15       8  301    335  3.54  3.57  14.6     0     1     5     8
# Python
data_py.groupby('cyl').filter(lambda x: sum(x['hp']) > 2000)
##      mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 4   18.7  8.0  360.0  175.0  3.15  3.440  17.02  0.0  0.0   3.0   2.0
## 6   14.3  8.0  360.0  245.0  3.21  3.570  15.84  0.0  0.0   3.0   4.0
## 11  16.4  8.0  275.8  180.0  3.07  4.070  17.40  0.0  0.0   3.0   3.0
## 12  17.3  8.0  275.8  180.0  3.07  3.730  17.60  0.0  0.0   3.0   3.0
## 13  15.2  8.0  275.8  180.0  3.07  3.780  18.00  0.0  0.0   3.0   3.0
## 14  10.4  8.0  472.0  205.0  2.93  5.250  17.98  0.0  0.0   3.0   4.0
## 15  10.4  8.0  460.0  215.0  3.00  5.424  17.82  0.0  0.0   3.0   4.0
## 16  14.7  8.0  440.0  230.0  3.23  5.345  17.42  0.0  0.0   3.0   4.0
## 21  15.5  8.0  318.0  150.0  2.76  3.520  16.87  0.0  0.0   3.0   2.0
## 22  15.2  8.0  304.0  150.0  3.15  3.435  17.30  0.0  0.0   3.0   2.0
## 23  13.3  8.0  350.0  245.0  3.73  3.840  15.41  0.0  0.0   3.0   4.0
## 24  19.2  8.0  400.0  175.0  3.08  3.845  17.05  0.0  0.0   3.0   2.0
## 28  15.8  8.0  351.0  264.0  4.22  3.170  14.50  0.0  1.0   5.0   4.0
## 30  15.0  8.0  301.0  335.0  3.54  3.570  14.60  0.0  1.0   5.0   8.0

2. Select thuộc tính

# R
head(select(data_r, cyl, hp, wt), 5)
## # A tibble: 5 x 3
##     cyl    hp    wt
##   <dbl> <dbl> <dbl>
## 1     6   110  2.62
## 2     6   110  2.88
## 3     4    93  2.32
## 4     6   110  3.22
## 5     8   175  3.44
# Python
data_py[['cyl', 'hp', 'wt']].head(5)
##    cyl     hp     wt
## 0  6.0  110.0  2.620
## 1  6.0  110.0  2.875
## 2  4.0   93.0  2.320
## 3  6.0  110.0  3.215
## 4  8.0  175.0  3.440
# R
head(select(data_r, -mpg), 5)
## # A tibble: 5 x 10
##     cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1     6   160   110  3.9   2.62  16.5     0     1     4     4
## 2     6   160   110  3.9   2.88  17.0     0     1     4     4
## 3     4   108    93  3.85  2.32  18.6     1     1     4     1
## 4     6   258   110  3.08  3.22  19.4     1     0     3     1
## 5     8   360   175  3.15  3.44  17.0     0     0     3     2
# Python
data_py.drop('mpg', 1).head(5)
##    cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 0  6.0  160.0  110.0  3.90  2.620  16.46  0.0  1.0   4.0   4.0
## 1  6.0  160.0  110.0  3.90  2.875  17.02  0.0  1.0   4.0   4.0
## 2  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0   1.0
## 3  6.0  258.0  110.0  3.08  3.215  19.44  1.0  0.0   3.0   1.0
## 4  8.0  360.0  175.0  3.15  3.440  17.02  0.0  0.0   3.0   2.0

3.Sắp Xếp dữ liệu theo thứ tự

# R
# Sắp xếp dữ liệu theo giá trị tăng dần của cột cyl
arrange(data_r, cyl)
## # A tibble: 32 x 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1
##  2  24.4     4 147.     62  3.69  3.19  20       1     0     4     2
##  3  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2
##  4  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1
##  5  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2
##  6  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1
##  7  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1
##  8  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1
##  9  26       4 120.     91  4.43  2.14  16.7     0     1     5     2
## 10  30.4     4  95.1   113  3.77  1.51  16.9     1     1     5     2
## # ... with 22 more rows
# Python
data_py.sort_values('cyl').head(10)
##      mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 31  21.4  4.0  121.0  109.0  4.11  2.780  18.60  1.0  1.0   4.0   2.0
## 2   22.8  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0   1.0
## 27  30.4  4.0   95.1  113.0  3.77  1.513  16.90  1.0  1.0   5.0   2.0
## 26  26.0  4.0  120.3   91.0  4.43  2.140  16.70  0.0  1.0   5.0   2.0
## 25  27.3  4.0   79.0   66.0  4.08  1.935  18.90  1.0  1.0   4.0   1.0
## 20  21.5  4.0  120.1   97.0  3.70  2.465  20.01  1.0  0.0   3.0   1.0
## 7   24.4  4.0  146.7   62.0  3.69  3.190  20.00  1.0  0.0   4.0   2.0
## 8   22.8  4.0  140.8   95.0  3.92  3.150  22.90  1.0  0.0   4.0   2.0
## 19  33.9  4.0   71.1   65.0  4.22  1.835  19.90  1.0  1.0   4.0   1.0
## 18  30.4  4.0   75.7   52.0  4.93  1.615  18.52  1.0  1.0   4.0   2.0
# R
# Sắp xếp dữ liệu theo giá trị giảm dần của cột cyl
arrange(data_r, desc(cyl))
## # A tibble: 32 x 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  2  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  3  16.4     8  276.   180  3.07  4.07  17.4     0     0     3     3
##  4  17.3     8  276.   180  3.07  3.73  17.6     0     0     3     3
##  5  15.2     8  276.   180  3.07  3.78  18       0     0     3     3
##  6  10.4     8  472    205  2.93  5.25  18.0     0     0     3     4
##  7  10.4     8  460    215  3     5.42  17.8     0     0     3     4
##  8  14.7     8  440    230  3.23  5.34  17.4     0     0     3     4
##  9  15.5     8  318    150  2.76  3.52  16.9     0     0     3     2
## 10  15.2     8  304    150  3.15  3.44  17.3     0     0     3     2
## # ... with 22 more rows
# Python
data_py.sort_values('cyl', ascending=False).head(10)
##      mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
## 16  14.7  8.0  440.0  230.0  3.23  5.345  17.42  0.0  0.0   3.0   4.0
## 30  15.0  8.0  301.0  335.0  3.54  3.570  14.60  0.0  1.0   5.0   8.0
## 4   18.7  8.0  360.0  175.0  3.15  3.440  17.02  0.0  0.0   3.0   2.0
## 28  15.8  8.0  351.0  264.0  4.22  3.170  14.50  0.0  1.0   5.0   4.0
## 6   14.3  8.0  360.0  245.0  3.21  3.570  15.84  0.0  0.0   3.0   4.0
## 24  19.2  8.0  400.0  175.0  3.08  3.845  17.05  0.0  0.0   3.0   2.0
## 23  13.3  8.0  350.0  245.0  3.73  3.840  15.41  0.0  0.0   3.0   4.0
## 22  15.2  8.0  304.0  150.0  3.15  3.435  17.30  0.0  0.0   3.0   2.0
## 21  15.5  8.0  318.0  150.0  2.76  3.520  16.87  0.0  0.0   3.0   2.0
## 11  16.4  8.0  275.8  180.0  3.07  4.070  17.40  0.0  0.0   3.0   3.0

4. Tạo thuộc tính mới

# R
# Tạo và thêm biến mới có tên cyl2
mutate(data_r, cyl2 = mean(cyl))
## # A tibble: 32 x 12
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4  6.19
##  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4  6.19
##  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1  6.19
##  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1  6.19
##  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2  6.19
##  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1  6.19
##  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4  6.19
##  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2  6.19
##  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2  6.19
## 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4  6.19
## # ... with 22 more rows
# Python
import numpy as np
data_py.assign(cyl2 = lambda x: np.mean(x.cyl)).head(10)
##     mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb    cyl2
## 0  21.0  6.0  160.0  110.0  3.90  2.620  16.46  0.0  1.0   4.0   4.0  6.1875
## 1  21.0  6.0  160.0  110.0  3.90  2.875  17.02  0.0  1.0   4.0   4.0  6.1875
## 2  22.8  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0   1.0  6.1875
## 3  21.4  6.0  258.0  110.0  3.08  3.215  19.44  1.0  0.0   3.0   1.0  6.1875
## 4  18.7  8.0  360.0  175.0  3.15  3.440  17.02  0.0  0.0   3.0   2.0  6.1875
## 5  18.1  6.0  225.0  105.0  2.76  3.460  20.22  1.0  0.0   3.0   1.0  6.1875
## 6  14.3  8.0  360.0  245.0  3.21  3.570  15.84  0.0  0.0   3.0   4.0  6.1875
## 7  24.4  4.0  146.7   62.0  3.69  3.190  20.00  1.0  0.0   4.0   2.0  6.1875
## 8  22.8  4.0  140.8   95.0  3.92  3.150  22.90  1.0  0.0   4.0   2.0  6.1875
## 9  19.2  6.0  167.6  123.0  3.92  3.440  18.30  1.0  0.0   4.0   4.0  6.1875

5. Thống kê mô tả theo phân nhóm

# R
data_r %>% 
  group_by(cyl, am) %>% 
  summarise(mean_cyl = mean(cyl),
            sum_cyl = sum(cyl),
            count_cyl = n())
## `summarise()` regrouping output by 'cyl' (override with `.groups` argument)
## # A tibble: 6 x 5
## # Groups:   cyl [3]
##     cyl    am mean_cyl sum_cyl count_cyl
##   <dbl> <dbl>    <dbl>   <dbl>     <int>
## 1     4     0        4      12         3
## 2     4     1        4      32         8
## 3     6     0        6      24         4
## 4     6     1        6      18         3
## 5     8     0        8      96        12
## 6     8     1        8      16         2
# Python
data_py.groupby(['cyl', 'am'])['cyl'].agg(['mean', 'sum', 'count'])
##          mean   sum  count
## cyl am                    
## 4.0 0.0   4.0  12.0      3
##     1.0   4.0  32.0      8
## 6.0 0.0   6.0  24.0      4
##     1.0   6.0  18.0      3
## 8.0 0.0   8.0  96.0     12
##     1.0   8.0  16.0      2

6. Tóm tắt

Dưới đây là tóm tắt so sánh một số thao tác với dữ liệu hay dùng nhất trong Python và R

Querying, Filtering, Sampling

R Python
dim(df) df.shape
head(df) df.head()
slice(df, 1:10) df.iloc[:9]
filter(df, col1 == 1, col2 ==1) df.query(‘col1 == 1 & col2 == 1’)
df[df\(col1 == 1 & df\)col2 == 1] df[(df.col1 == 1) & (df.col2 == 1)]
select(df, col1, col2) df[[‘col1’, ‘col2’]]
select(df, col1:col3) df.loc[:, ‘col1’:‘col3’]
select(df, -(col1:col3)) df.drop(cols_to_drop, axis=1)
distinct(select(df, col1)) df[[‘col1’]].drop_duplicates()
distinct(select(df, col1, col2)) df[[‘col1’, ‘col2’]].drop_duplicates()
sample_n(df, 10) df.sample(n=10)
sample_frac(df, 0.01) df.sample(frac=0.01)

Sorting

R Python
arrange(df, col1, col2) df.sort_values([‘col1’, ‘col2’])
arrange(df, desc(col1)) df.sort_values(‘col1’, ascending=False)

Grouping and Summarizing

R Python
summary(df) df.describe()
gdf <- group_by(df, col1) gdf = df.groupby(‘col1’)
summarise(gdf, avg=mean(col1, na.rm=TRUE)) df.groupby(‘col1’).agg({‘col1’: ‘mean’})
summarise(gdf, total=sum(col1)) df.groupby(‘col1’).sum()
Cuong Sai
Cuong Sai
PhD student

My research interests include Industrial AI (Intelligent predictive maintenance), Machine and Deep learning, Time series forecasting, Intelligent machinery fault diagnosis, Prognostics and health management, Error metrics / forecast evaluation.

comments powered by Disqus

Related