Как проверить, находятся ли элементы списка временных меток в серии, содержащей временные метки?

#python #pandas

#python #панды

Вопрос:

Проблема:

Я хочу проверить, какие записи в списке pandas.Временные метки находятся в pandas.Серия временных меток фрейма данных. Проблема в том, что когда я использую in оператор для проверки, находится ли значение из списка в серии, возвращается пустой список, даже если определенное значение находится в серии.

Код:

  1. Список временных меток:
 dates_range = pd.date_range(start="2019-01-01", end="2019-01-31")
type(dates_range[0]) # pandas._libs.tslibs.timestamps.Timestamp
  
  1. Серия, содержащая временные метки:
 type(_2019["dates"]) # pandas.core.series.Series
type(_2019["dates"].iloc[0]) # pandas._libs.tslibs.timestamps.Timestamp
  
  1. Сравните первое значение dates_range и _2019["dates"] :
 _2019["dates"].iloc[0] == dates_range[0] # True
  
  1. Суть:
 dates_range[0] in _2019["dates"] # False

def get_dates_that_exist(data, datetime_arr):
    return [date for date in datetime_arr if date in data["dates"]] # Returns []
  

Почему это так? Как я могу проверить, какие даты из списка dates_range находятся в _2019[«даты»]?

Ответ №1:

Сначала проверьте с помощью оператора in:

Использование оператора Python в серии проверяет принадлежность к индексу, а не принадлежность к значениям.

Итак, если хотите проверить, есть ли хотя бы один True для сравнения по первому значению для логической маски и добавить Series.any :

 (_2019["dates"] == dates_range[0]).any()
  

И для проверки всех данных, range если они соответствуют хотя бы одному значению, используйте Series.isin :

 _2019["dates"].isin(dates_range).any()
  

Я хотел бы знать, КАКИЕ там значения

Используйте DataFrame.loc с boolean indexing :

 matched = _2019.loc[_2019["dates"].isin(dates_range), 'dates']
  

Если нужны все столбцы:

 df1 = _2019[_2019["dates"].isin(dates_range)]
  

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

1. Хорошо, спасибо, а что, если я хочу проверить, какие конкретные записи из dates_range находятся в _2019[«даты»]. То, что вы предоставили, проверяет, есть ли хотя бы одно значение в dates_range, которое является _2019[«даты»]. Я хотел бы знать, КАКИЕ там значения.