Сначала давайте посмотрим, в чем проблема, затем мы сможем найти способ ее исправить.
In [1]: import pandas as pd
In [2]: pets = pd.read_csv('pets.csv')
In [3]: pets
Out[3]:
Pets Owners
0 dog James
1 dog Katelyn
2 rat Shelly
3 cat Bob
In [4]: type(pets["Owners"])
Out[4]: pandas.core.series.Series
Мы можем видеть, что pets
является pandas.Series
объектом. Теперь проблема очевидно в этой строке кода:
if owner in pets['Owners']:
Вот почему вы не можете использовать оператор in
с pandas.Series
, но в основном это потому, что разработчики Pandas
не реализовали этот модуль таким способом, который был бы возможен для используйте " Операции проверки членства ", как это. Поэтому, как вы упомянули сами, это всегда вернет False
:
In [5]: owner in pets["Owners"]
Out[5]: False
Теперь, если вы хотите использовать pets["Owners"]
, вы можете сделать это следующим образом (как предложено @ piRSquared ):
In [6]: owner in pets["Owners"].values
Out[6]: True
Однако, если мы посмотрим на документацию для pandas.Series.values
:
Предупреждение: Мы рекомендуем использовать Series.array или Series.to_numpy () ,
в зависимости от того, нужна ли вам ссылка на базовые данные или
Массив NumPy.
Итак, мы можем сделать это так:
In [7]: owner in pets["Owners"].array
Out[7]: True
Есть также лучший способ сделать это, вы хотите узнать, «есть ли домашние животные для данного владельца», правильно? Если это так, вы можете сделать это так:
In [8]: pet = pets.loc[pets["Owners"] == owner, "Pets"]
In [8]: if pet.any():
...: print(pet)
...: else:
...: print("You didn't enter any Owner. Try again! ")
Out[8]:
1 dog
Name: Pets, dtype: object
Как видите, будет напечатан объект pandas.Series
. У вас есть упомянутое , что вам нужно в формате «вектор / список / массив». Это немного неясно, но я думаю, что ситуация в том, что owner
может иметь несколько pets
, и вы хотите проверить, имеет ли owner
любой pets
, а затем вывести все их pets
в формате списка. Если это так, вы можете использовать pet.array
. Например, если мы изменим ваш набор данных так, чтобы у Katelyn было более одного питомца:
Pets Owners
dog James
dog Katelyn
rat Katelyn <-----
rat Shelly
cat Bob
Тогда мы можем видеть, что это дает нам список:
In [9]: if pet.any():
...: print(pet.array)
...: else:
...: print("You didn't enter any Owner. Try again! ")
Out[9]:
<PandasArray>
['dog', 'rat']
Length: 2, dtype: object