【问题标题】:Maximum Recursion Level Reached Converting Pandas Dataframe to Json将 Pandas 数据帧转换为 Json 达到最大递归级别
【发布时间】:2020-03-02 13:45:54
【问题描述】:

我有一个包含数千行和几列的 pandas 数据框。尝试将其转换为 json 文件时出现错误。

这是要转换的代码:

sessionAttendance.to_json('SessionAttendance.json')

这是我得到的错误:

OverflowError: Maximum recursion level reached


                             _id       wondeID  session               updatedAt
0       123456789101112131415161  AA1234567891        AM 2019-06-21 08:05:50.845
1       123456789101112131415162  AA1234567892        AM 2019-06-21 08:05:50.845
2       123456789101112131415163  AA1234567893        AM 2019-06-21 08:05:50.845
3       123456789101112131415164  AA1234567894        AM 2019-06-21 08:05:50.845


[234195 rows x 4 columns]

【问题讨论】:

  • 如果您向minimal reproducible example 提供了几行数据,也许我们可以尝试重现...
  • 这行不通。 Eric(和我)怀疑循环依赖。我们需要所有的列,并且需要知道它们真正包含的内容。例如,如果一列包含一个列表(不是列表表示的字符串,而是一个真正的列表),您应该说出它,并说出它是如何构建的。
  • @SergeBallesta 他们都是对象
  • 嗯,从 234195 行构建一个 json 似乎很消耗资源。你的系统有多少内存,你的操作系统和 Python 版本是什么?
  • _id 列是否与 Mongo 相关?我刚刚找到stackoverflow.com/a/14567504/3545273。是什么给了sessionAttendance.iloc[:100].to_json('SessionAttendance.json', default_handler=str)

标签: python pandas


【解决方案1】:

这似乎与 Mongo 格式化其 _id 字段的方式有关,这些字段未被 json 模块正确处理。一种解决方法是设置 default_handler=str 以强制 json 格式化程序对任何不需要的类型使用字符串表示:

sessionAttendance.to_json('SessionAttendance.json', default_handler=str)

免责声明:应归功于其他SO post

【讨论】:

    【解决方案2】:
    import sys
    sys.setrecursionlimit(1500) # this number can be any limit
    

    如果它是一个表格,上面的代码应该修复它。如果您的 pandas 数据框本身具有作为对象的列,您可能需要确保对象中没有循环依赖项

    https://github.com/pandas-dev/pandas/issues/4873

    这可能与上面发布的问题有关。要克服它,首先将您的日期时间列转换为字符串

    df['updatedAt'] = df['updatedAt'].dt.strftime('%Y-%m-%d %H:%M:%S')

    将其转换为 json 应该可以工作。

    【讨论】:

    • 谢谢 Eric,我试过了,但没有任何区别。如何检查是否存在循环依赖?
    • 您可以发布数据框的前几行吗?
    • 你能把每一栏都发一遍吗?
    • 感谢@Eric Yang。我刚刚尝试将日期/时间列转换为字符串,但仍然出现相同的错误
    • 能贴出每一列的数据类型吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2017-02-04
    相关资源
    最近更新 更多