代码之家  ›  专栏  ›  技术社区  ›  PatrickT

pandas:保留保存为羽毛格式的数据类型

  •  0
  • PatrickT  · 技术社区  · 4 年前

    我的理解是 feather format的优点在于它保留了类型。所以我预计 object 变量的数据类型 state 会被保存下来,但事实并非如此。为什么?有办法绕过这个吗?

    import sys
    import pandas
    from pandas import Timestamp
    print(pandas.__version__)
    ## 1.3.4
    print(sys.version)
    ## 3.9.7 (default, Sep 16 2021, 08:50:36) 
    ## [Clang 10.0.0 ]
    
    
    d = pandas.DataFrame({'Date': {0: Timestamp('2020-12-01 00:00:00'), 1: Timestamp('2020-11-01 00:00:00'), 2: Timestamp('2020-10-01 00:00:00'), 3: Timestamp('2020-09-01 00:00:00'), 4: Timestamp('2020-08-01 00:00:00')}, 'state': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, 'value': {0: 3.1, 1: 3.4, 2: 3.9, 3: 5.9, 4: 6.4}})
    
    d.dtypes
    # Date     datetime64[ns]
    # state             int64
    # value           float64
    # dtype: object
    
    d["state"] = d["state"].astype(object)
    
    d.dtypes
    # Date     datetime64[ns]
    # state            object
    # value           float64
    # dtype: object
    
    d.to_feather("test.feather")
    
    d = pandas.read_feather("test.feather")
    d.dtypes
    # Date     datetime64[ns]
    # state             int64
    # value           float64
    # dtype: object
    

    我想要 状态 可以是“字符串”或“对象”,但不能是“int64”。我不想每次加载数据帧时都要重新编译。谢谢

    0 回复  |  直到 4 年前
        1
  •  1
  •   PatrickT    4 年前

    不久前,邝在评论中建议以下作品:

    d["state"] = d["state"].astype(str)
    

    我没有任何解释。我很乐意选择其他更好的答案。