【问题标题】:How to convert an 'ndarray' column dtype from '<M8[us]' to a string?如何将 'ndarray' 列 dtype 从 '<M8[us]' 转换为字符串?
【发布时间】:2019-10-10 05:56:28
【问题描述】:

我尝试了很多东西,但似乎无法让它发挥作用。本质上,我想这样做是因为当我尝试将此 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',)]

【问题讨论】:

    标签: python dataframe multidimensional-array datetime64 dtype


    【解决方案1】:

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


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

    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
    

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

    您可以使用pd.to_datetimeerrors kwarg 捕获这些解析错误:

    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
    

    【讨论】:

    • 不完全是,我执行df = pd.DataFrame(record)时出现错误。所以我试图在转换为 Dataframe 格式之前更改 dtype,如果这有意义吗?
    • 那么请不要让我们猜你在做什么 - How to Ask / minimal reproducible example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2020-08-14
    • 2023-03-19
    • 2016-11-25
    相关资源
    最近更新 更多