Выяснение, имеет ли весь столбец в фрейме данных Pandas одно и то же значение или нет

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных pandas, который работает просто отлично. Я пытаюсь выяснить, как определить, содержит ли столбец с меткой, которую я знаю, если она правильная, не все одинаковые значения.

Код

 below errors out for some reason when I want to see if the column contains -1 in each cell
# column = "TheColumnLabelThatIsCorrect"
# df = "my correct dataframe"

# I get an () takes 1 or 2 arguments but 3 is passed in error    
if (not df.loc(column, estimate.eq(-1).all())):
 

Я только что узнал о .eq() и .all() и, надеюсь, я использую их правильно.

Ответ №1:

Это проблема синтаксиса — см. Документы для .loc /indexing . В частности, вы хотите использовать [] вместо ()

Вы можете сделать что-то вроде

 if not df[column].eq(-1).all():
    ...
 

Если вы хотите использовать .loc конкретно, вы бы сделали что-то подобное:

 if not df.loc[:, column].eq(-1).all():
    ...
 

Кроме того, обратите внимание, что вам не нужно использовать .eq() , вы можете просто сделать (df[column] == -1).all()) , если хотите.

Комментарии:

1. я вижу. Я использовал . loc, когда мне это было не нужно.

Ответ №2:

Вы можете удалить дубликаты, и если вы получите только одну запись, это означает, что все записи одинаковы.

 import pandas as pd
df = pd.DataFrame({'col': [1, 1, 1, 1]})
len(df['col'].drop_duplicates()) == 1
> True
 

Ответ №3:

Вопрос не такой ясный. Давайте попробуем следующее

Содержит только -1 в каждой ячейке

 df['estimate'].eq(-1).all()
 

Содержит -1 в любой ячейке

 df['estimate'].eq(-1).any()
 

Отфильтруйте -1 и все столбцы

 df.loc[df['estimate'].eq(-1),:]
 

Ответ №4:

df['column'].value_counts() предоставляет вам список всех уникальных значений и их количество в столбце. Что касается проверки, являются ли все значения определенным числом, вы можете сделать это, удалив дубликаты и проверив, что длина равна 1.

 len(set(df['column'])) == 1