Различие, или, возможно, только то, как я помню, поскольку я был под тем же впечатлением, что и исходный плакат, таков: Java всегда проходит по значению. Все объекты (в Java, все, кроме примитивов) в Java - это ссылки. Эти ссылки передаются по значению.
in серии проверяет, находится ли значение в индексе:
In [11]: s = pd.Series(list('abc'))
In [12]: s
Out[12]:
0 a
1 b
2 c
dtype: object
In [13]: 1 in s
Out[13]: True
In [14]: 'a' in s
Out[14]: False
. Один из вариантов - увидеть, есть ли он в уникальных значениях:
In [21]: s.unique()
Out[21]: array(['a', 'b', 'c'], dtype=object)
In [22]: 'a' in s.unique()
Out[22]: True
или набор python:
In [23]: set(s)
Out[23]: {'a', 'b', 'c'}
In [24]: 'a' in set(s)
Out[24]: True
Как указано в @DSM, он может быть более эффективным (особенно если вы просто делаете это для одного значения) просто использовать непосредственно по значениям:
In [31]: s.values
Out[31]: array(['a', 'b', 'c'], dtype=object)
In [32]: 'a' in s.values
Out[32]: True
Вы также можете использовать pandas.Series.isin, хотя он немного длиннее 'a' in s.values:
In [2]: s = pd.Series(list('abc'))
In [3]: s
Out[3]:
0 a
1 b
2 c
dtype: object
In [3]: s.isin(['a'])
Out[3]:
0 True
1 False
2 False
dtype: bool
In [4]: s[s.isin(['a'])].empty
Out[4]: False
In [5]: s[s.isin(['z'])].empty
Out[5]: True
. Но этот подход может быть более гибким, если вам нужно сопоставить сразу несколько значений для a DataFrame (см. pandas.Series.isin )
>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7]})
>>> df.isin({'A': [1, 3], 'B': [4, 7, 12]})
A B
0 True False # Note that B didn't match 1 here.
1 False True
2 True True
'a' in s
, панды предпочитают проверять индекс, а не значения серии? В словарях они проверяют ключи, но серия pandas должна вести себя как список или массив, нет? – Lei 22 November 2017 в 18:55