Pandas datetime64 问题(datetime 引入数据峰值)

Posted

技术标签:

【中文标题】Pandas datetime64 问题(datetime 引入数据峰值)【英文标题】:Pandas datetime64 problem (datetime introduces spikes in data) 【发布时间】:2020-08-17 22:05:31 【问题描述】:

这是我关于 *** 的第一个问题,请善待 :) 我使用导入的 csv 文件和 pandas,并且非常喜欢使用 pandas 日期时间来工作和过滤数据帧的可能性。但是当使用日期作为 datetime64 时,我在以一种简洁的方式绘制数据时遇到了严重的问题。在使用熊猫地块或海生地块时。 我的 csv 看起来像这样:

    date time   Flux_ConNT_C    Flux_ConB1  Flux_ConB2  Flux_ConB3  Flux_ConB4  Flux_ConB4
0   01.01.2015 00:30    2.552032129 2.193558665 1.0093326   1.013124869 1.159512896 1.159512896

1   01.01.2015 01:00    2.553308464 2.195533756 1.01003938  1.013935693 1.160672989 1.160672989

2   01.01.2015 01:30    2.554585438 2.197510626 1.010746655 1.014747166 1.161834243 1.161834243

3   01.01.2015 02:00    2.55586305  2.199489276 1.011454426 1.015559289 1.162996658 1.162996658

4   01.01.2015 02:30    2.557141301 2.201469707 1.012162692 1.016372061 1.164160236 1.164160236

当我绘制数据时

df.plot(figsize=(15,8))

我的输出是right output

但是当我将“日期时间”列更改为 'datetime64 时

df['date time'] = pd.to_datetime(df['date time'])

并使用相同的代码进行绘图,数据是用这些尖峰绘制的,它不可用false output

matplotlib 似乎有问题,但除了将register_matplotlib_converters() 放在情节之前,我找不到其他任何东西,这并没有改变任何东西。 我正在使用 Spyder IDE 和 Python 3.7,所有库都是最新的。 感谢您的帮助!

【问题讨论】:

【参考方案1】:

你的问题不是奇迹,它根本无法重现。

    您确定您的 csv 没有第一个索引列 0..4 的标题吗? 您确定 csv 的第 8 列与第 7 列重复吗? 您是如何实际导入此 csv 并构建数据框的? 第一个绘图仅在将范围索引 0..4 替换为“日期时间”列后才有效。在调用 plot 方法之前,您还对数据框应用了哪些其他转换? 您的 to_datetime 转换仅适用于列,而不适用于索引。为什么不分享您一直在使用的所有代码? 在 2 个图中,前 5 行没有区别。您为什么不共享 2 个图中实际上不同的数据行?

我会感谢您尝试正确地抽象问题。不幸的是,您遗漏了重要信息。根据您在此处显示的有限信息,完全没有问题。

为了澄清我的观点:您观察到的与 datetime64[ns] 转换无关,但可能与您认为不够重要而无法与我们分享的非常简单的事情有关。

看看How to create a Minimal, Reproducible Example。这个想法是:当您能够以可重现的方式准备问题时,您可能能够自己解决它。

【讨论】:

What should I do when someone answers my question? 感谢您的评论彼得,我的问题是 df['date time'] = pd.to_datetime(df['date time']) 搞砸了日期并在数据框中的某些点将“y-m-d”切换为“y-d-m”,从而导致了这些峰值。通过在 pd.read_csv 参数中设置日期时间(如 df=pd.read_csv(file, parse_dates=['date time'], dayfirst=True))解决了该问题

以上是关于Pandas datetime64 问题(datetime 引入数据峰值)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 datetime64[ns] 和 pandas 计算天数?

将 float64 列转换为 datetime pandas 时出错

pandas 中 datetime 和 datetime64[ns] 的比较

python时间处理模块datetime+dateutilnumpy时间处理模块datetime64以及pandas时间处理模块Timestamp的演化路径及常用处理接口

pandas datetime格式转换

Pandas datetime64 问题(datetime 引入数据峰值)