0

我已经尝试了很多事情,但似乎无法让它发挥作用。本质上,我想这样做是因为当我尝试将此 ndarray 转换为 DataFrame 时发生错误。在 Dataframe 中查找缺失的 Datetime64 值时会发生以下错误:

“越界纳秒时间戳:1-01-01 00:00:00”

因此,我希望将这些 DateTime64 列转换为字符串并在 ndarray 中重新编码“1-01-01 00:00:00”,然后将它们转换回 DataFrame 中的 DateTime 变量,以避免遇到上面显示的错误。

with sRW.SavReaderNp('C:/Users/Sam/Downloads/data.sav') as reader:
record = reader.all()

印刷:

[(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000',
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000',
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '0001-01-01T00:00:00.000000',)]

首先请检查您的帖子是否有效,即包含可运行代码。您的示例返回语法错误,并且您尝试解释的代码根本不存在。


但是,我假设您的数据看起来像

arr = [(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '0001-01-01T00:00:00.000000')]

看起来转换为数据框

df = pd.DataFrame(arr, columns=['ID', 'value', 'date'])

#                                         ID  ...                        date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  0001-01-01T00:00:00.000000

那么您尝试将日期字符串转换为日期时间对象可能是

df.date = pd.to_datetime(df.date)

# OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

这会导致您在问题中发布的错误消息。

errors您可以使用以下kwarg捕获这些解析错误pd.to_datetime

df.date = pd.to_datetime(df.date, 'coerce')

#                                         ID     value       date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0        NaT
4

1 回答 1

0

首先请检查您的帖子是否有效,即包含可运行代码。您的示例返回语法错误,并且您尝试解释的代码根本不存在。


但是,我假设您的数据看起来像

arr = [(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '0001-01-01T00:00:00.000000')]

看起来转换为数据框

df = pd.DataFrame(arr, columns=['ID', 'value', 'date'])

#                                         ID  ...                        date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  0001-01-01T00:00:00.000000

那么您尝试将日期字符串转换为日期时间对象可能是

df.date = pd.to_datetime(df.date)

# OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

这会导致您在问题中发布的错误消息。

errors您可以使用以下kwarg捕获这些解析错误pd.to_datetime

df.date = pd.to_datetime(df.date, 'coerce')

#                                         ID     value       date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0        NaT
于 2019-10-10T06:43:58.847 回答