R函数%的panda等价物是什么?
当我们在R中有一个数据帧时,我们可以使用提供布尔输出的运算符%in%
来检查列中哪些行包含列表中的字符串。
具体示例:如果我们想检查哪些行的字符串"setosa";以及";virginica";在iris
数据集的species
列中,我们可以简单地使用以下代码:
iris[:,c('species')] %in% c('setosa', 'virginica')
。
我们如何在python中为pandas
DataFrame做同样的事情?
我想这样做的原因是我想过滤数据集,并且只保留与物种"的行;setosa";或";virginica";。
R中的%in%
实际上是is.element
:
r$> 1 %in% 1:2
[1] TRUE
r$> is.element(1, 1:2)
[1] TRUE
datar
已经将R中的一些函数移植到了python:
>>> from datar.all import c, f, is_element, filter
>>> from datar.datasets import iris
>>>
>>> iris >> filter(is_element(f.Species, c('setosa', 'virginica')))
Sepal_Length Sepal_Width Petal_Length Petal_Width Species
<float64> <float64> <float64> <float64> <object>
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
.. ... ... ... ... ...
4 5.0 3.6 1.4 0.2 setosa
95 6.7 3.0 5.2 2.3 virginica
96 6.3 2.5 5.0 1.9 virginica
97 6.5 3.0 5.2 2.0 virginica
98 6.2 3.4 5.4 2.3 virginica
99 5.9 3.0 5.1 1.8 virginica
[100 rows x 5 columns]
我是datar
软件包的作者。如果您有任何问题,请随时提交问题。
pandas
包具有用于字符串列的.str
方法,而.str
方法本身包含.isin()
方法,该方法等效于R中的%in%
运算符。此外,正如@rhug123所指出的,.isin
方法可以直接应用于序列。我已经对下面的代码进行了相应的更改。
上面的R代码可以使用pandas
在python中实现,如下所示——假设iris
是pandas DataFrame:
iris.species.isin(['setosa', 'virginica'])
然后,你可以过滤你的DataFrame,只保留带有"setosa"或"virginica"物种的行,如下所示:
iris[iris.species.isin(['setosa', 'virginica'])]