猿问

如何检查时间戳列表的元素是否在包含时间戳的序列中?

问题:


我想检查 pandas.Timestamps 列表的哪些条目位于数据帧的 pandas.Timestamp 系列中。问题是,当我使用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[“dates”]中?


元芳怎么了
浏览 102回答 1
1回答

临摹微笑

首先检查使用 in 运算符:在 Series 上使用 Python in 运算符测试索引中的成员资格,而不是值之间的成员资格。因此,如果想要测试是否至少有一个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)]
随时随地看视频慕课网APP

相关分类

Python
我要回答