问题描述
Pandas 相当于 R 函数 %in% 是什么?
当我们在 R 中有一个数据框时,我们可以使用运算符 %in%
检查列中哪些行包含列表中的字符串,该运算符提供布尔输出。
具体例子:如果我们想检查字符串“setosa”和“virginica”在species
数据集的iris
列中的哪一行,我们可以简单地使用以下代码:
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()
方法,它等效于 %in%
R 中的运算符。
上面的 R 代码可以使用 pandas
在 python 中实现,如下所示 - 假设 iris
是一个 Pandas DataFrame:
iris.species.str.isin(['setosa','virginica'])
然后您可以过滤您的 DataFrame 并仅保留物种为“setosa”或“virginica”的行,如下所示:
iris[iris.species.str.isin(['setosa','virginica'])]