为了账号安全,请及时绑定邮箱和手机立即绑定

与 json 之间的 Pandas 时间戳

与 json 之间的 Pandas 时间戳

湖上湖 2021-12-08 10:21:48
对象无法序列化为 json,因此需要通过自定义 JsonEncoder 类进行转换或解析。pandas Dataframe 有很多方法,比如from_records读取 json 数据。然而,当您读回该 json 数据时,它返回为 int64 而不是时间戳。有很多方法可以在熊猫中给猫剥皮。读写json时保留数据结构的最佳方法是什么?
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

为了它的价值,我将 Pandas 数据帧保存到 Postgres 数据库,并且我想保留时区索引。我使用以下代码:


class db_JsonEncodedDataFrameWithTimezone(db.TypeDecorator):

    """Enables JSON storage by encoding and decoding on the fly."""

    impl = db.Text


    def process_bind_param(self, value, dialect):

        if value is not None and isinstance(value, pd.DataFrame):

            timezone = value.index.tz.zone

            df_json = value.to_json(orient="index")

            data = {'timezone': timezone, 'df': df_json, 'index_name': value.index.name}

            value = json.dumps(data)

        return value


    def process_result_value(self, value, dialect):

        if value is not None:

            data = json.loads(value)

            df = pd.read_json(data['df'], orient="index")

            df.index = df.index.tz_localize('UTC')

            df.index = df.index.tz_convert(data['timezone'])

            df.index.name = data['index_name']

            value = df

        return value


    def compare_values(self, x, y):

        from pandas.util.testing import assert_frame_equal

        try:

            assert_frame_equal(x, y, check_names=True, check_like=True)

            return True

        except (AssertionError, ValueError, TypeError):

            return False


查看完整回答
反对 回复 2021-12-08
?
MM们

TA贡献1886条经验 获得超2个赞

如果我正确理解了您的问题,那么您正在寻找一种保留数据帧数据类型的序列化方式。

问题是交换格式在内部使用的类型很少:只有 csv 的字符串、json 的字符串和数字。当然,有一些方法可以在读取时提供格式提示(csv 中日期列的日期格式),并且在提取后通常很容易转换回正确的类型,我认为您希望采用更自然的方式。正如 Attack68 所建议的那样,您可以使用数据库,但例如 SQLite 数据库将关闭,因为它没有内部日期类型。

恕我直言,一个简单的方法是依靠好的旧pickle模块。毕竟,数据帧是一个包含其他 Python 对象的 Python 对象,所以 pickle 擅长序列化它。唯一要记住的一点是,在反序列化时,必须在调用之前导入熊猫pickle.load

但是我刚刚用包含各种数据类型的(小)数据帧进行了测试,pickle 非常适合正确保存和恢复它们。


查看完整回答
反对 回复 2021-12-08
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信