当 ISO 年份与公历年份不同时,Python Dataframe isocalendar() 布尔条件不会产生所需的结果

2024-03-24

令我惊讶的是,当我只想要当年第一周的数据时,我的简单布尔条件却产生了完整的一年结果。

My code:

# Some sample data
df1 = pd.DataFrame([1596., 1537., 1482., 1960., 1879., 1824.],index=['2007-01-01 00:00:00', '2007-01-01 01:00:00',
               '2007-01-01 02:00:00', '2007-12-31 21:00:00',
               '2007-12-31 22:00:00', '2007-12-31 23:00:00'])
df1.index = pd.to_datetime(df1.index,format = '%Y-%m-%d %H:%M:%S')


# Consider and plot only the 2007 year and first week result
year_plot = 2007
year_data = df1[(df1.index.year==year_plot)&(df1.index.isocalendar().week==1)]
print(year_data)
                        DAYTON_MW
Datetime    
2007-01-01 00:00:00     1596.0
2007-01-01 01:00:00     1537.0
2007-01-01 02:00:00     1482.0
2007-01-01 03:00:00     1422.0
2007-01-01 04:00:00     1402.0
...     ...
2007-12-31 19:00:00     2110.0
2007-12-31 20:00:00     2033.0
2007-12-31 21:00:00     1960.0
2007-12-31 22:00:00     1879.0
2007-12-31 23:00:00     1824.0

192 rows × 1 columns
year_data.plot(figsize=(15, 5), title='Week Of Data')
plt.show()

我需要你的帮助才能知道问题出在哪里。

Update: 问题已经找到了。同时@J_H也发现了这个问题。我很惊讶为什么它会这样,它把 2007 年的最后几天当作第一周。

Result:根据接受的答案,解决方案是

df1[(df1.index.isocalendar().year==year_plot)&(df1.index.isocalendar().week==1)]\
.plot(figsize=(15, 5), title='Week Of Data')#    plt.savefig('oneweek.png')
plt.show()

这是正常行为。

>>> df1.index.isocalendar().week
2007-01-01 00:00:00    1
2007-01-01 01:00:00    1
2007-01-01 02:00:00    1
2007-12-31 21:00:00    1
2007-12-31 22:00:00    1
2007-12-31 23:00:00    1
Name: week, dtype: UInt32
>>> 
>>> df1.index.isocalendar().year
2007-01-01 00:00:00    2007
2007-01-01 01:00:00    2007
2007-01-01 02:00:00    2007
2007-12-31 21:00:00    2008
2007-12-31 22:00:00    2008
2007-12-31 23:00:00    2008
Name: year, dtype: UInt32

说“一月”有点含糊, 但“2007 年 1 月”描述的是特定的 31 天间隔。

同样,说“第一周”也有点含糊。 通常我们会传递一个二元组(iso_year,iso_week)。 你在这里遇到的困难是 所有这些时间戳都在第一周, 但有些是 2007 年的第一周,有些是 2008 年的第一周。

https://en.wikipedia.org/wiki/ISO_week_date https://en.wikipedia.org/wiki/ISO_week_date

ISO 周编号年份(非正式地也称为 ISO 年)有 52 或 53 个整周。那是364或371天......

一周从星期一开始。 12月31日是星期一。

每年的每周都是周四所在的公历年。因此,一年中的第一周始终包含 1 月 4 日。

在 1 月 4 日至 12 月 28 日期间,ISO 周年数始终等于公历年数。每个星期四也是如此。

2007 年 12 月 31 日星期一并不满足这两个条件。

该代码正在执行我们要求的操作。

建议您使用 (iso_year, iso_week) 来建模时间 不仅仅是一个(iso_week)属性。


仔细隔离这两个标识符:

  • year
  • iso_year

第一个指的是公历年份,例如公元 2023 年, 出现在你的台历上的那种事情。 第二个指的是“ISO 周编号年份”, 这是一个完全不同的概念。 请参阅维基百科页面以获取其描述内容的定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 ISO 年份与公历年份不同时,Python Dataframe isocalendar() 布尔条件不会产生所需的结果 的相关文章

随机推荐

  • 将 HTML 文件导入到另一个 HTML 文件中

    我想知道如何将 HTML 文件导入到其他 HTML 文件中 这两个文件都引用许多不同的文件 因此我更愿意将它们保存在两个不同的文件夹中 而不是将一个文件复制到另一个文件中 目前 我正在使用 Django 进行本地开发 include fil
  • keycloak 上是否有用于更改用户密码的 API 调用?

    我正在尝试实现自己的表单来更改用户的密码 我试图在 Keycloak 中找到用于更改用户密码的 API 但在文档中找不到任何内容 有API可以做到这一点吗 您可以使用PUT auth admin realms realm users id
  • 调用渲染与绘制 DOM?

    我正在学习 React 并试图更好地理解生命周期和不同阶段 我刚刚读到的一件事是 React 首先渲染然后安装元素 在这种情况下渲染意味着调用类的 render 而不是绘制 DOM 我想我只是不太明白这意味着什么 有人可以用简单的方式或举例
  • Ansichar 和 char 有什么区别? [复制]

    这个问题在这里已经有答案了 我最近遇到了这种数据类型不匹配的情况 这是我以前从未见过的 我希望有人能解释它们是什么以及它们有何不同 我得到的错误是 F2063 DCC 错误 E2010 不兼容的类型 AnsiChar 和 Char 历史上在
  • 增加 ulimit Mac OS X 10.8

    I m learning MongoDB and when I start the mongo shell a wild warning message appeared It says 我如何更改 软限制 我使用的是 Mac OSX 10
  • 如何删除 Hudson 的构建工件?

    我们使用 Hudson 作为我们的持续集成服务器 它非常棒 我们有两个问题 它们有轻微的相关性 https hudson dev java net issues show bug cgi id 2736 https hudson dev j
  • 将数据集加载到数据库时,DBUnit 出现 NoPrimaryKeyException

    当我尝试运行使用 DBUnit 的单元测试之一时 我收到 NoPrimaryKeyException 数据表是使用 Hibernate 创建的 是映射多对多关系的两个类之间的连接表 定义关系的注解如下 Override ManyToMany
  • Pagedown markdown 脚本插入图像 url 一次

    我有一个修改后的 pagedown markdown 标记脚本 用于将图像 url 插入编辑器 但它仅在第一次起作用 我已经用注释解释了我的代码
  • 使用 python scapy 发送 DHCP Discover

    我是Python新手 正在学习一些网络编程 我希望通过我的tap接口向我的DHCP服务器发送一个DHCP数据包 并期待它的一些响应 我尝试了几种数据包构建技术 例如 structs 和 ctypes 最终使用 scapy 在这里 我能够发送
  • 附加属性有哪些不同的用途?

    到目前为止 我在 WPF 的冒险经历中已经看到了 AttachedProperties 的一些非常不同的用途 我想知道其中有哪些不同的用途 我见过相当普通的用途 例如 Grid 和 Canvas 中的用途 以及一些非常酷的技巧 允许在没有
  • 在 Jupyter Notebook 中重新加载 Python 模块(不自动重新加载)

    我有以下文件夹结构 project src init py mymodule py mynotebook ipynb within mynotebook我可以导入mymodule使用标准公式from src mymodule import
  • 如何使用空格或缩进注释多行

    在 Visual Studio 2010 中 我有多行文本需要注释 A B C Using CTRL E C to comment out multiple lines I get A B C 我想在之间有一个空格 或缩进 and A he
  • GNUPLOT:点图,数据取决于点大小

    我正在尝试绘制由 3 个坐标组成的数据集 X 坐标 x 坐标和出现次数 例子 1 2 10 3 1 2 3 2 1 我想在 x y 处为每条线画一个点 其直径取决于第三个值 Gnuplot 可以做到这一点吗 创建具有可变点大小的二维图 看t
  • CSS非标准“ZOOM”属性

    我有一个 css 文件 其中包含一个带有 Zoom 1 的类 我在浏览器控制台上收到以下错误 该页面使用非标准的 缩放 属性 相反 您可以使用 calc 或将 transform 与 transform origin 0 0 一起使用 如何
  • $redis 全局变量与 ruby​​ on Rails

    我使用 redis 作为读取缓存 我创建了一个初始化程序 配置 初始化程序 redis rb redis Redis new host gt ENV REDIS HOST port gt ENV REDIS PORT 每当创建新工作人员时
  • 未在命名空间中捕获 PDOException

    我不知道怎样才能抓住PDOException在下面的代码中 请告诉我下面的代码中哪里抛出异常 我有 目录 folder 1 b php 2 c php autoloader in the b php and in c php class c
  • 测试“0”、“-0”、“0.0”、“00”时的 PHP 和 Perl 行为

    当 PHP Perl 测试一个值时 我遇到了这个有趣的行为 print 0 Yes No gt No print 00 Yes No gt Yes print 0 0 Yes No gt Yes print 0 Yes No gt Yes
  • 为什么C#中没有反向枚举器?

    有谁知道是否有特定原因或设计决定不在 C 中包含反向枚举器 如果有一个与 C 相当的东西就好了reverse iterator就像 Enumerator 相当于 C 一样iterator 可以反向迭代的集合只需实现 IReverseEnum
  • 关于如何识别右值或左值引用以及 if-it-has-a-name 规则

    我正在读托马斯 贝克尔的书article http thbecker net articles rvalue references section 05 html关于右值引用及其使用 在那里他定义了他所说的如果它有一个名字 rule 声明为
  • 当 ISO 年份与公历年份不同时,Python Dataframe isocalendar() 布尔条件不会产生所需的结果

    令我惊讶的是 当我只想要当年第一周的数据时 我的简单布尔条件却产生了完整的一年结果 My code Some sample data df1 pd DataFrame 1596 1537 1482 1960 1879 1824 index