【问题标题】:Python Pandas datetime64[ns] comparisionPython Pandas datetime64[ns] 比较
【发布时间】:2016-09-29 00:19:18
【问题描述】:

我正在尝试使用索引来选择日期 2011 年 1 月 1 日之后的数据框中的行。我使用以下代码行仅返回 2011-01-01 之后的部分数据帧

  df = df[df.Date > np.datetime64('2011-01-01 00:00:00')]

我没有收到错误。但是,我只看到 2016 年的日期,2011 年没有。当我手动打开文件时,我可以看到有很多从 2011 年开始的条目。

我在这里做错了什么?有什么想法吗?

谢谢!

这是截取的数据:enter image description here

【问题讨论】:

  • 请分享df中数据的sn-p;最好是包含2011-01-01之前和之后日期的行。
  • 我刚刚编辑了我的帖子以包含数据的 sn-p。这是一个长数据集,日期不一致。我注意到,当我在数据帧上应用 .sort_index 时,我仍然只能在数据帧的头部和尾部看到 2016 年的结果。
  • 我不能用图片来测试你的代码。它应该是这里的任何人都可以复制并粘贴到他们的 python 控制台中以测试您的代码的数据。尝试使用pastebin 将数据粘贴到那里并随后共享链接。
  • 我用filedropper这里是链接filedropper.com/crimes-2001topresent_1

标签: python datetime pandas


【解决方案1】:

导入数据后,Date 列的所有值似乎仍然存在,即使经过过滤也是如此。只是您的数据太大而无法在控制台上完全显示(看看pandas settings)。因此,其中一些被(视觉上)截断以适合页面。

使用将Date 列转换为pandas 日期时间对象并从那里处理过滤的技巧:

import pandas as pd

df = pd.read_csv('Crimes_-_2001_to_present.csv', header = 0)
df.Date = pd.to_datetime(df.Date)

filterer = df.Date > pd.to_datetime('2011-01-01 00:00:00')
df = df[filterer]

现在,当您查看Date 列中的第 200 行时,您应该会得到一些东西:

df['Date'].iloc[200]
#Timestamp('2011-05-31 19:30:00')

Date 列的第 2000 行:

df['Date'].iloc[2000]
#Timestamp('2013-09-19 20:45:00')

本质上,一切都在那里。您的控制台可能太小,无法容纳所有设备。

我希望这会有所帮助。

【讨论】:

  • 谢谢阿布杜!我认为 2011 年的数据可能介于过滤数据的中间。当我使用 sort_index 并没有看到它时,我感到很沮丧。这是我用来排序的代码:df = df.sort_index(axis=0)
  • 你应该使用df.sort_values(by = 'Date'),因为Date是一个列,而不是索引。
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 2023-02-07
  • 2020-08-20
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2022-01-02
  • 2017-01-05
相关资源
最近更新 更多