#python #pandas
#python #панды
Вопрос:
Проблема:
Я хочу проверить, какие записи в списке pandas.Временные метки находятся в pandas.Серия временных меток фрейма данных. Проблема в том, что когда я использую in
оператор для проверки, находится ли значение из списка в серии, возвращается пустой список, даже если определенное значение находится в серии.
Код:
- Список временных меток:
dates_range = pd.date_range(start="2019-01-01", end="2019-01-31")
type(dates_range[0]) # pandas._libs.tslibs.timestamps.Timestamp
- Серия, содержащая временные метки:
type(_2019["dates"]) # pandas.core.series.Series
type(_2019["dates"].iloc[0]) # pandas._libs.tslibs.timestamps.Timestamp
- Сравните первое значение
dates_range
и_2019["dates"]
:
_2019["dates"].iloc[0] == dates_range[0] # True
- Суть:
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[«даты»]. Я хотел бы знать, КАКИЕ там значения.