python - 使用一个数据帧的索引访问另一个数据帧的行时出错
问题描述
我有两个不同的数据框,df1 和 df2。df1 由从初始日期到最终日期的完整日期系列索引;df2 从必须在 df1 中的日期索引,但它的索引是 df1 索引的子集。我正在尝试遍历 df1.index 并使用以下代码验证 df1 的特定索引值是否存在于 df2 中:
from datetime import timedelta
import datetime
import pandas as pd
for idx in df1.index:
if idx in df2.index:
print(df2.loc[idx])
我面临的问题是 df2 的某些索引是产生 if 语句,而有些则不是。例如:
sdate = datetime.date(2020, 5, 4)
edate = datetime.date(2020, 10, 1)
some_date = edate - timedelta(days=2)
# df1 with all the dates
df1 = pd.DataFrame(index=pd.date_range(sdate,edate-timedelta(days=1),freq='d'))
# df2 with only two dates (sdate and some_date)
df2 = pd.DataFrame(index=[sdate, some_date])
当我尝试运行以下代码时,它会产生False
df1.loc[some_date].name in df2.index
>>> False
尽管some_date
显然在 df2.index
some_date in df2.index
>>> True
在与 df2.index 的比较中,首先出现的返回df1.loc[some_date].name
不兼容,但是当尝试运行以下代码时,会观察到不同的行为:
df1.loc[sdate].name in df2.index
>>> True
sdate in df2.index
>>> True
这真的如何运作?
解决方案
错误是因为数据类型不同。
df1.index
是datetime
和df2.index
是date
。
试试这样:
df1.index.normalize()
for idx in df2.index:
if idx in df2.index:
print(df2.loc[idx])
或者,用日期时间替换日期:
sdate = datetime.datetime(2020, 5, 4)
edate = datetime.datetime(2020, 10, 1)
推荐阅读
- javascript - 如何在 Jupyter 笔记本中将 HTML 元素与 Python 函数链接?
- python - 不同的mysql select语句但睡眠时间很长
- java - Spring EL 无法在 xml 配置文件的 Integer 属性中解析
- solr - Solr:如何对具有多个字段的文档进行 DISTINCT(field1, field2, field3) 搜索?
- dolphindb - 使用 DolphinDB MySQL 插件失败
- php - htacess 重写规则在查询字符串中返回错误值
- java - 解析文本文件并删除java中双引号内的逗号
- material-ui - Material UI - 多行 InputBase 的高度在切换宽度时根据行数属性设置为全高
- ios - 尝试替换出现的空格时,字符串中的空格不会注册为空格
- android - 在 RecyclerView 中,在配置更改中保持元素展开/选中