python - 如何防止在 numpy astype 中丢失纳秒
问题描述
当我遇到这种情况object
时,datetime64[ns]
会丢失纳秒。为什么会发生这种情况,如何解决?在 python 3.6 和 3.7 中相同的行为。
import numpy as np
import pandas as pd
a = np.ndarray(1, dtype=object)
a[0] = pd.Timestamp.max
print(a)
print(a.astype('datetime64[ns]'))
在输出中,我们可以看到纳秒被归零
[Timestamp('2262-04-11 23:47:16.854775807')]
['2262-04-11T23:47:16.854775000']
最初的问题来自熊猫数据框和这段代码:
df = pd.DataFrame(columns=['col'])
#df.loc[0] = [None] # uncommenting this line makes nanoseconds being dropped
df.loc[0] = [pd.Timestamp.max]
print(df['col'].values.astype('datetime64[ns]'))
更新
Numpy 文档说纳秒仅支持[ 1678 AD, 2262 AD]
. 但是对于范围内的日期时间值,该问题会重现:
import numpy as np
import pandas as pd
a = np.ndarray(1, dtype=object)
a[0] = pd.Timestamp(2020, 7, 31, 12, 12, 12, 123456, 789)
print(a)
print(a.astype('datetime64[ns]'))
在输出中,我们可以看到纳秒被归零
[Timestamp('2020-07-31 12:12:12.123456789')]
['2020-07-31T12:12:12.123456000']
解决方案
我无意中找到了解决方法。
fillna
恢复纳秒!
df = pd.DataFrame(columns=['col'])
df.loc[0] = [None]
df.loc[0] = [pd.Timestamp(2020, 7, 31, 12, 12, 12, 123456, 789)]
print(df['col'].values.astype('datetime64[ns]'))
df['col'] = df['col'].fillna('')
print(df['col'].values.astype('datetime64[ns]'))
输出:
['2020-07-31T12:12:12.123456000']
['2020-07-31T12:12:12.123456789']
推荐阅读
- mysql - 在 MySQL 中绘制图形?
- arrays - 阿杜诺;动态获取数组元素;数组是 struct 类型,包含不同大小的字符串
- python - 导入类也导入 argparse 选项
- javascript - 使用我的javascript框架中名称中带有空格的路径打开文件夹...语法问题
- google-cloud-functions - 谷歌云功能 - 无法处理请求
- image - javafx 访问 jar 外的图像
- javascript - Webpack 捆绑样式没有被提取到 css 文件中
- javascript - Ajax 请求时出现 500 内部服务器错误。不确定问题的根源
- javascript - 如何在快递服务器中添加动态路由?
- android - 如何在 Application.mk 中设置 APP-PLATFORM 以匹配 Android Studio 3.2.1 中的 targetSDKVersion