【问题标题】:Writing DataFrame to encoded JSON Newline Delimited将 DataFrame 写入编码的 JSON 换行符分隔
【发布时间】:2018-11-04 02:24:50
【问题描述】:

在 Python 2.7 中,我有一个带有多个 unicode 列、整数列等的 Pandas 数据框。我需要能够将它编码为 utf-8 的格式写入 JSON 换行符分隔文件。

我试过了,但它只适用于 Python 3,不适用于 Python 2.7。

with io.open('myjson.json','w',encoding='utf-8') as f:
    f.write(df.to_json(orient="records", lines=True, force_ascii=False))

这是我尝试的结果,但如您所见,它不是 utf-8 编码的。

{"account_id":"support","case_id":7697,"message":"\u0633\u0628 \u0627\u0644\u0644\u0647\u0627\u0644\u0644\u0647 \u0627\u0644\u0639","created_at":1536606086392,"agent":"108915"} 
{"account_id":"support","case_id":7697924,"message":"\u0647\u0627\u064a","created_at":1536601516354,"agent":"108915"}

我认为这与this 有关。但我不确定。

我所做的其他研究表明,如果我把它放在我的代码中,它就可以工作。但我也读到不推荐这样做。

import sys
reload(sys)  
sys.setdefaultencoding('utf8')

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    edit - 我错过了 2.7 部分 - 我通常使用 3.5 或更高版本。在任何情况下,使用 python 2.7,我都能够使用编解码器将 unicode 字符串转换为 utf-8:

    import codecs 
    codecs.unicode_escape_decode(a['message'])[0].encode("utf-8") 
    '\xd8\xb3\xd8\xa8 \xd8\xa7\xd9\x84\xd9\x84\xd9\x87\xd8\xa7\xd9\x84\xd9\x84\xd9\x87 \xd8\xa7\xd9\x84\xd8\xb9' 
    

    旧答案 -

    看起来 pandas .to_json() 的默认设置为 ensure_ascii=True,它将非 ascii 转换为 Unicode。

    来自文档:

    to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression=None, index=True)
    

    尝试将其设置为 False:

    df.to_json(force_ascii=False)
    '{"agent":{"0":"108915"},"created_at":{"0":1536606086392},"message":{"0":"سب اللهالله الع"}}'
    

    编辑 - 忘记你在寻找换行符,

    >>> df.to_json(force_ascii=False, orient="records")
    [{"agent":"108915","created_at":1536606086392,"message":"سب اللهالله الع"}]
    

    【讨论】:

    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2018-04-02
    • 2015-12-21
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多