python - 如何检查时间戳列表的元素是否在包含时间戳的系列中?
问题描述
问题:
我想检查 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"] 中?
解决方案
首先检查使用 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)]
推荐阅读
- java - Java 字节码错误:期望在堆栈上找到对象/数组
- bash - 如何循环包含名称列表的 file.txt?
- image - 如何避免 UNet 算法偏向于背景,而不是罕见的异常?
- python - Dockerfile 和诗歌 | 执行器运行失败 [/bin/sh -c 诗歌安装 --no-dev]:退出代码:1
- android - Android 内容无法正确显示
- flutter - 带有 Flutter Test 的 Finder 是否始终按照渲染时间的顺序返回小部件?
- sql - 有没有办法通过自动表创建将 CSV 导入 Oracle DB?使用命令行
- python - scikit (skimage) 如何用于 tiff 格式的影片剪辑?
- java - 如何从 Kotlin 项目中的放心测试中获取 Cucumber 报告
- c# - xml节点中的转义字符