- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我偶然注意到,日期时间上的一些操作 (a > b) 应该给出相同的(明确定义的)结果,但实际上给出了不同的结果(一些正确,一些错误,一些只是抛出错误),具体取决于我是否在 pandas 数据框或 numpy 中执行它们。我尝试在下面举一个小例子。为简洁起见,我使用 dateutile.parser.parse 函数,但我认为问题出现在 datetime、pandas 和 numpy 包之间的相互作用中,特别是在使用 pandas 的 DatetimeIndex 时。
首先,我尝试从 np.timedelta64 创建一个 df,但无法与单个 np.timedelta64 进行比较;这是一个明显的错误,我认为没关系:
import numpy as np
import pandas as pd
from dateutil.parser import parse
a1 = np.array([np.datetime64(parse('20200101')),np.datetime64(parse('20150101'))]).reshape((1,-1))
a2 = np.array([np.datetime64(parse('20100101')),np.datetime64(parse('20180101'))]).reshape((-1,1))
df1 = pd.DataFrame(a1-a2)
df1 > np.timedelta64(1000,'D')
上面的 df1 是:
0 1
0 3652 days 00:00:00 1826 days 00:00:00
1 730 days 00:00:00 -1096 days +00:00:00
第二个命令抛出错误“TypeError: ufunc 'isnan' 不支持输入类型,并且根据转换规则 ''safe'',无法将输入安全地强制为任何支持的类型”。到目前为止,一切顺利。
但是,如果我写:
a3 = pd.DatetimeIndex(a1.flatten()).values.reshape((1,-1))
df2 = pd.DataFrame(a3 - a2)
结果看起来类似:df2 =
0 1
0 3652 days 1826 days
1 730 days -1096 days
但在这种情况下,df2 > np.timedelta64(1000,'D')
不仅不会抛出错误,而且给出了错误的答案:
0 1
0 True True
1 True False
另一方面,如果我们不执行 pd.DataFrame(a3-a2) > np.timedelta64(1000,'D')
,而是执行 pd.DataFrame(a3- a2 > np.timedelta64(1000,'D'))
,我们得到了很好的答案:
0 1
0 True True
1 False False
鉴于这种情况,我想某处一定存在错误,尽管我不太确定在哪里。也许我只是误解了一些符号,但无论如何,这种行为有点令人费解。一些问题可能来自这样的事实:根据上述定义,某些 dtype(例如 df1)以微秒为单位,其他一些(例如 df2)以纳秒为单位;但是,我希望这些应该得到正确处理,因为输出已正确转换为天......
作为引用,我使用的是 Python 3.5、numpy 版本 1.12.1、pandas 版本 0.18.0 和 python-dateutil 版本 2.5.1。
编辑:经过进一步测试,并考虑下面保罗的回答:
该错误显然已在 Pandas 0.19.2 版本中得到解决。 Paul 下面的代码片段,以及上面关于 df2 的代码,都经过 Paul 的测试,可以在 Linux、Python3.5、Pandas 0.19.2 下正确工作,而且我还在 Linux 和 Windows 下检查过它们,都是 Python2.7和Python3.5、Pandas 0.20.2。
在 0.18.2 中,Paul 下面的代码片段给出了与上面 df2 相同(错误)的答案。
但是,在我的测试中,也是在 0.20.2 中,上面的第一个代码(此问题上的 df1)给出了错误的答案,全部为 False。这可能是因为 pandas 将日期存储为微秒(因为 Paul 的显式转换解决了问题),而 numpy 将日期存储为纳秒,因此存在一个静默因子 1000。不过,我认为应该注意这一点自动...
最佳答案
这种行为显然不一致,因为我无法在最新版本的 pandas
上重现您的问题,但两种情况之间的主要区别似乎是 df1
正在存储 np.dtype('timedelta64[us]')
对象,df2
正在存储 np.dtype('timedelta64[ns]' )
对象。
我不确定为什么您认为 df1 > np.timedelta64(1000, 'D')
应该失败 - 我的直觉是它没有任何类型转换问题。也就是说,似乎至少从 0.19.2
版本开始,如果您始终确保将数据帧转换为 np.timedelta64[ns]
,您将不会'没有这个问题:
import pandas as pd
import numpy as np
from datetime import datetime
a1 = np.array([np.datetime64(datetime(2020, 1, 1)),
np.datetime64(datetime(2015, 1, 1))]).reshape((1,-1))
a2 = np.array([np.datetime64(datetime(2010,1,1)),
np.datetime64(datetime(2018,1,1))]).reshape((-1,1))
df1 = pd.DataFrame(a1 - a2).astype(np.dtype('timedelta64[ns]'))
kiloday = np.timedelta64(1000, 'D')
df1 > kiloday
# 0 1
# 0 True True
# 1 False False
关于python - 混合 pandas、datetime 和 numpy timedelta 时出现不稳定行为(bug?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417961/
如果输入稳定,我想触发 AJAX 请求(以便不在每个新字符后发送请求)。我尝试了以下方法: $('#input').keyup(function(){ // Get the value when
我读到,我们可以插入以将选择排序更改为稳定排序,而不是交换。我在网上得到了以下相同的实现。 void selection ( int a[], int n ) { while ( --n >
我正在尝试创建一个非常节省空间的不寻常的关联数组实现,我需要一个满足以下所有条件的排序算法: 稳定(不改变具有等键的元素的相对顺序。) 就地或几乎就地(O(log n) 堆栈很好,但没有 O(n) 空
我有一个节点的无线网状网络,每个节点都能够向其邻居报告其“距离”,以(简化的)信号强度来衡量。节点在地理上位于 3d 空间中,但由于 radio 干扰,节点之间的距离不需要在三角(三角?)上一致。即,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在实现一个玩具调度程序,它读取进程规范(例如到达时间、总运行时间)的输入文件,然后根据随机 io/cpu 突发调度进程。 文件格式 Arrival time, total CPU time, CP
我正在使用 JRedis 的同步实现,但我打算切换到异步方式与 Redis 服务器通信。 但在此之前我想问一下社区 JRedisFuture 是否实现了 alphazero 的 jredis对于生产使
我们正在为我们的公司构建一个RESTful API,它将提供XML,JSON和可能的其他内容类型。 我的团队正在寻找一个框架(按优先顺序排列): 有据可查 理想的情况下,它具有出色的教程以及繁荣的社区
我的网站希望用户上传他们的照片...但我该如何保护我们的服务器免受伤害?只允许 JPG 应该可以避免病毒问题,但如果有人选择 10Gb 文件怎么办 - 这会减慢整个网站的速度吗? 我们使用的是经典 A
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8 个月前关闭。 Improve this ques
据我所知,paintEvent() 是在 QApplication 对象的“主循环”中执行的,并且可以为其内部系统任务花费时间,从而延迟执行排队槽或其他事件。 但是,如果我需要播放非常流畅的动画并且我
我想对随机排序的 ActiveRecord 模型列表(来自 MySQL 数据库的行)进行分页。 但是,这种随机化需要在每个 session 的基础上持续存在,以便访问该网站的其他人也会收到一个随机的、
在 Flutter Web 稳定后,我尝试按照文档中给出的说明将我的 Flutter Mobile 应用程序转换为 Flutter Web。一切都很好,但这里的问题是 Web 上的文本不可选择!我刚刚
我正在尝试制作一个包含 Nginx stable 最新使用 vts 模块编译的 dockerfile .... 我遇到了一个大问题,当我放入将下载的 docker 文件时我找不到一些汽车链接安装最新的
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在使用以下命令将 Airflow 部署到 Kubernetes 中:https://github.com/helm/charts/tree/master/stable/airflow 我正在尝
我已经安装了本地测试elasticsearch和logstash,它们似乎看不到本地es-知道在集群/ ns中如何看到es吗? helm repo add elastic https://helm.e
我最近加入了一家公司,担任发布工程师,在这里,大量的开发团队以各种语言开发了众多服务,应用程序和Web应用程序,它们之间具有各种相互依赖性。 我正在尝试找到一种简化并最好自动发布的方法。当前,发布团队
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想知道一种在 Windows 上使用简单批处理和 ffmpeg 稳定 goPro 视频的简单方法。 最佳答案 1) 在您的计算机上安装 ffmpeg:按照 steps 安装 2) 在您要处理的视频旁
我是一名优秀的程序员,十分优秀!