Python从零开始第三章数据处理与分析①python中的dplyr(1)

96
左手柳叶刀右手小鼠标 Excellent
3.1 2018.12.28 16:30* 字数 644
  • 前言

我经常使用R的dplyr软件包进行探索性数据分析和数据处理。 dplyr除了提供一组可用于解决最常见数据操作问题的一致函数外,dplyr还允许用户使用管道函数编写优雅的可链接的数据操作代码。

现在,Python是我的主要语言,pandas是我用于数据分析的助手,但我经常希望有一个Python包允许直接在pandas DataFrame上进行dplyr风格的数据操作。于是我找到了一个名为dfply的软件包,由Kiefer Katovich开发。 与dplyr一样,dfply也允许使用管道运算符链接多个操作。

这篇文章将重点介绍dfply包的核心功能,并展示如何使用它们来操作pandas DataFrames。

  • 入门

我们需要做的第一件事是使用pip安装软件包。

pip install dfply

根据该项目的Github介绍,dfply仅适用于Python 3,因此请确保安装了正确版本的Python。

  • 使用用dfply管道函数

ddfply直接在pandas DataFrames上工作,使用>>运算符链接对数据的操作,或者以>> =从inplace操作开始。 在dfply中,操作链的每个步骤的DataFrame结果由X表示。例如,如果要在步骤中从DataFrame中选择三列,请在下一步中删除第三列,然后显示最终数据的前三行,您可以执行以下操作:

# 'data' is the original pandas DataFrame
(data >>
 select(X.first_col, X.second_col, X.third_col) >>
 drop(X.third_col) >>
 head(3))

select和drop都是dfply转换函数,而X代表每个转换步骤的结果。

  • 使用select()和drop()选择和删除列

# 'data' is the original pandas DataFrame
(diamonds >>
select(X.carat, X.cut, X.color) >>
drop(X.cut) >>
head(3))

Out[10]: 
  carat color
0   0.23     E
1   0.21     E
2   0.23     E

diamonds >> drop(1, X.price, ['x', 'y']) >> head(2)
Out[26]: 
  carat color clarity  depth  table     z
0   0.23     E     SI2   61.5   55.0  2.43
1   0.21     E     SI1   59.8   61.0  2.31

使用的数据集是经典的diamond数据集,通过上面的代码我们筛选了carat,cut和color三列然后删除了cut列

还可以通过在要删除的列的前面放置一个波浪号〜来删除select()方法中的列。
例如,要选择diamonds中除cut以外的所有已经选择列:

 (diamonds >>
 select(X.carat, X.cut, X.color) >>
 select(~X.cut) >>
 head(3))

Out[10]: 
   carat color
0   0.23     E
1   0.21     E
2   0.23     E
  • 使用mask()过滤行

mask()允许您根据逻辑条件在pandas DataFrame中选择行的子集。 mask()选择条件为/的所有行。
例如,要选择carat > 0.21以及cut=='Fair同时price < 563的行:

df = (diamonds >>
select(X.carat, X.cut, X.price) >>
mask(X.carat > 0.21,  X.cut=='Fair', X.price < 563))
df
Out[23]: 
     carat   cut  price
8       0.22  Fair    337
10030   0.30  Fair    416
28270   0.25  Fair    361
31611   0.23  Fair    369
31615   0.27  Fair    371
40591   0.30  Fair    496
40597   0.34  Fair    497
46961   0.37  Fair    527
48630   0.30  Fair    536
  • 使用arrange()对行进行排序

arrange()允许您根据一列或多列来排序行; 默认行为是按升序对行进行排序。例如,要按carat,然后按price排序,我们会:

df = (diamonds >>
      select(X.carat, X.cut, X.price) >>
      mask(X.carat > 0.21,  X.cut=='Fair', X.price < 563) >>
      arrange(X.carat,X.price))
df
Out[27]: 
       carat   cut  price
8       0.22  Fair    337
31611   0.23  Fair    369
28270   0.25  Fair    361
31615   0.27  Fair    371
10030   0.30  Fair    416
40591   0.30  Fair    496
48630   0.30  Fair    536
40597   0.34  Fair    497
46961   0.37  Fair    527
Web note ad 1