【问题标题】:Pandas read JSON causes values to convert into scientific notationPandas 读取 JSON 导致值转换为科学计数法
【发布时间】:2018-06-13 06:42:12
【问题描述】:

我正在使用一个熊猫数据框,其中一列包含一个 27 位数字。我使用以下方法将 Dataframe 转换为 JSON 数组:

pd.read_json(df, orient='split')

在将 JSON 数组转换回 Dataframe 时,我使用了:

 pd.read_json(df, orient='split')

但是,在转换中,这些值被转换为科学计数法。

Actual: 8.123456e+27
Expected: 8123456342700123300640123456

有没有办法解决这个问题?抱歉只提供 sudo 代码,我正在处理机密信息。

【问题讨论】:

  • 您希望该字段是什么类型(int 或 float)?
  • 科学数字列的 dtype 是什么?
  • 在原始数据框中,值是object,但科学符号数现在是float64

标签: python json python-3.x pandas scientific-notation


【解决方案1】:

我设法通过在 pd.read_json 中包含一个附加参数来找到解决方法

pd.read_json(df, orient='split', dtype = {"column_name": object})

I used this as reference

感谢大家的帮助!

【讨论】:

    【解决方案2】:

    你可以使用

    pd.set_option('display.float_format', lambda x: '%d' % x)
    

    例如,用这个样本数据

    df = pd.DataFrame([['8123456342700123300640123456']],
                       index=['row'],
                       columns=['col'])
    print(df.dtypes)
    dx = df.to_json(orient='split')
    dg = pd.read_json(dx, orient='split')
    print(dg)
    print(dg.dtypes)
    

    输出:(通知float64 for col

    col    object
    dtype: object
                                 col
    row 8123456342700123332831870976
    col    float64
    dtype: object
    

    要将其改回对象,您可以使用

    dg = pd.read_json(dx, orient='split').astype(object)
    print(dg)
    print(dg.dtypes)
    

    输出:

                                 col
    row 8123456342700123332831870976
    col    object
    dtype: object
    

    【讨论】:

    • 不幸的是,这对我不起作用:/我看到 dtype 读取 object,但打印的值仍然是科学计数法。我就这样执行了代码。 >>> pd.set_option('display.float_format', lambda x: '%d' % x)>>> var = pd.read_json(df, orient='split').astype(object)
    • Repl.it Code 这是工作代码。你能检查一下熊猫的版本吗?
    • 我找到了解决办法,非常感谢您的帮助!
    猜你喜欢
    • 2019-08-27
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    相关资源
    最近更新 更多