在语法上模拟tidyr r包的包

tidypython的Python项目详细描述


tidypython-一个简单的python包,设计成在语法上模拟r中的tidyr包。

使用pip安装软件包:

pip install tidypython

使用以下命令将函数加载到脚本中:

from tidypython import *

然后您将可以访问以下功能:

gather(*args, **kwargs)
spread(*args, **kwargs)
separate(*args, **kwargs)

语法被设计成尽可能类似于r包tidyr。 所有的功能还没有完全实现,但是基本的功能已经实现了。

所有这些函数都设计为与dplython包运算符>>一起工作。

此软件包目前正在开发中,如果您想提供以下内容,请访问github页面: https://github.com/durrantmm/tidypython

示例

首先,导入dplython包:

from dplython import *

确保数据帧是DplyFrame对象你可以打电话给:

df = DplyFrame(df)

或者您可以使用readpy包直接读取文件:

from readpy import *
df = read_tsv("myfile.tsv")

gather()

gather()命令使用tidyr语法实现pandasmelt()函数。

您可以使用gather命令作为:

df >> gather(X.key, X.value, X.column1, X.column2...)

X.keyX.value用于确定将创建的键列和值列的新名称

默认情况下,这将使用column1、column2和所有其他后续列来确定键和值。全部 未指定的列将简单地用作索引或者,也可以使用语法

df >> gather(X.key, X.value, X.column1, X.column2, exclude=True)

这将使column1和column2成为索引,所有其他未指定的列将用于键和值 柱。

mtcars数据为例:

>>> mtcars = read_tsv('mtcars.tsv')
>>> print(mtcars >> head())
                name   mpg  cyl   disp   hp  drat     wt   qsec  vs  am  gear  carb
0          Mazda RX4  21.0    6  160.0  110  3.90  2.620  16.46   0   1     4     4
1      Mazda RX4 Wag  21.0    6  160.0  110  3.90  2.875  17.02   0   1     4     4
2         Datsun 710  22.8    4  108.0   93  3.85  2.320  18.61   1   1     4     1
3     Hornet 4 Drive  21.4    6  258.0  110  3.08  3.215  19.44   1   0     3     1
4  Hornet Sportabout  18.7    8  360.0  175  3.15  3.440  17.02   0   0     3     2

让我们首先通过包含来收集所有感兴趣的列:

>>> mtcars_gathered_inclusion = mtcars >> \
... gather(X.info, X.val, X.mpg, X.cyl, X.disp, X.hp, X.drat, X.wt, X.qsec, X.vs, X.am, X.gear, X.carb))
>>> print(mtcars_gathered_inclusion >> head())
                name info   val
0          Mazda RX4  mpg  21.0
1      Mazda RX4 Wag  mpg  21.0
2         Datsun 710  mpg  22.8
3     Hornet 4 Drive  mpg  21.4
4  Hornet Sportabout  mpg  18.7
>>> print(mtcars_gathered_inclusion >> tail())
               name  info  val
347    Lotus Europa  carb  2.0
348  Ford Pantera L  carb  4.0
349    Ferrari Dino  carb  6.0
350   Maserati Bora  carb  8.0
351      Volvo 142E  carb  2.0

现在我们可以通过排除来实现,在这种情况下,排除要短得多:

>>> mtcars_gathered_exclusion = mtcars >> \
... gather(X.info, X.val, X.name, exclude=True))
>>> print(mtcars_gathered_exclusion >> head())
                name info   val
0          Mazda RX4  mpg  21.0
1      Mazda RX4 Wag  mpg  21.0
2         Datsun 710  mpg  22.8
3     Hornet 4 Drive  mpg  21.4
4  Hornet Sportabout  mpg  18.7
>>> print(mtcars_gathered_exclusion >> tail())
               name  info  val
347    Lotus Europa  carb  2.0
348  Ford Pantera L  carb  4.0
349    Ferrari Dino  carb  6.0
350   Maserati Bora  carb  8.0
351      Volvo 142E  carb  2.0

您可以看到,它的功能非常类似于tidyr::gather函数。

spread()

spread()命令使用tidyr语法实现pandaspivot()函数。

可以将spread命令用作:

df >> spread(X.key, X.value)

^ {CD11>}和^ {< CD12>}用于指定已旋转的现有列,并且所有其他未使用的列都是 假设是索引。

这将使column1和column2成为索引,所有其他未指定的列将用于键和值 柱。

mtcars数据为例:

>>> mtcars = read_tsv('mtcars.tsv')
>>> print(mtcars >> head())
                name   mpg  cyl   disp   hp  drat     wt   qsec  vs  am  gear  carb
0          Mazda RX4  21.0    6  160.0  110  3.90  2.620  16.46   0   1     4     4
1      Mazda RX4 Wag  21.0    6  160.0  110  3.90  2.875  17.02   0   1     4     4
2         Datsun 710  22.8    4  108.0   93  3.85  2.320  18.61   1   1     4     1
3     Hornet 4 Drive  21.4    6  258.0  110  3.08  3.215  19.44   1   0     3     1
4  Hornet Sportabout  18.7    8  360.0  175  3.15  3.440  17.02   0   0     3     2

首先让我们通过排除来收集所有感兴趣的列:

>>> mtcars_gathered_exclusion = mtcars >> \
... gather(X.info, X.val, X.name, exclude=True))
>>> print(mtcars_gathered_exclusion >> head())
                name info   val
0          Mazda RX4  mpg  21.0
1      Mazda RX4 Wag  mpg  21.0
2         Datsun 710  mpg  22.8
3     Hornet 4 Drive  mpg  21.4
4  Hornet Sportabout  mpg  18.7

然后,我们可以通过使用spread函数将infoval列旋转出来:

>>> print(mtcars_gathered_exclusion >> spread(X.info, X.val) >> head())
                 name   mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear   carb
0         AMC Javelin  15.2  8.0  304.0  150.0  3.15  3.435  17.30  0.0  0.0   3.0    2.0
1  Cadillac Fleetwood  10.4  8.0  472.0  205.0  2.93  5.250  17.98  0.0  0.0   3.0    4.0
2          Camaro Z28  13.3  8.0  350.0  245.0  3.73  3.840  15.41  0.0  0.0   3.0    4.0
3   Chrysler Imperial  14.7  8.0  440.0  230.0  3.23  5.345  17.42  0.0  0.0   3.0    4.0
4          Datsun 710  22.8  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0    1.0

您可以看到,它的功能非常类似于tidyr::gather函数按照目前的执行情况, 列的顺序将在python>;=3.6中保留,但索引的顺序不会保留。

separate()

separate()命令在我知道的其他python包中没有直接并行。

您可以使用separate命令作为:

df >> separate(X.column, into, sep=myseperator)

X.column是要拆分的列,into是拆分列的新列名列表, sep是用于拆分X.column的正则表达式默认情况下,这将被[^\w]+分割

假设我们的mtcars数据帧只包含一个由 分隔符“”:

>>> print(mtcars_messy >> head())
                       name  
0          Mazda RX4|21.0|6
1       Mazda RX4 Wag|1.0|6
2         Datsun 710|22.8|4
3     Hornet 4 Drive|21.4|6
4  Hornet Sportabout|18.7|8

您可以使用以下命令将此列分为三列:

>>> mtcars_clean = mtcars_messy >> separate(X.name, ['name', 'mpg', 'cyl'], sep='\|')
>>> print(mtcars_clean >> head())
                name   mpg cyl
0          Mazda RX4  21.0   6
1      Mazda RX4 Wag  21.0   6
2         Datsun 710  22.8   4
3     Hornet 4 Drive  21.4   6
4  Hornet Sportabout  18.7   8

请注意,所有列在分隔后仍为字符串如果这个号码 指定的列数与拆分后的字符串数不匹配。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android上已连接音频输入设备的java列表   java是创建类的新对象还是使用静态方法?   Java:Shift/Rotate对象数组   Java Casting ArrayIterator<Object>   在java中返回布尔值时出错   无法确定文本文件读入程序(java)中的各种元素   Java Swing JToolBar   JAVAlang.IllegalStateException执行Ghost4J(Linux 32对64位)   jvm如何增加ubuntu系统的java堆化?   java CORS策略“AccessControlAllowOrigin”(Anguar 8和Servlet)   使用dagger 2的java视图依赖项注入   单元测试中RxJava的java模拟活动生命周期   arraylist中的Java打印字符串   java返回值显示为0.0。为什么会这样?   java是clientserver应用程序所必需的MVC吗?   ByteToMessageDecoder类中的java内存泄漏   java将大量文档写入firestore   GWT项目中的java TomcatMaven插件。两者之间的区别是什么:org。科德豪斯。魔咒和组织。阿帕奇。公猫maven插件   java swing:向JTree项添加自定义图形按钮