2016-09-21 81 views
3

我试图写一个包含unicode的熊猫DataFrame给json,但内建的.to_json函数会转义字符。我该如何解决?将熊猫数据框写入JSON中的unicode

实施例:

import pandas as pd 
df = pd.DataFrame([['τ', 'a', 1], ['π', 'b', 2]]) 
df.to_json('df.json') 

这给出:

{"0":{"0":"\u03c4","1":"\u03c0"},"1":{"0":"a","1":"b"},"2":{"0":1,"1":2}} 

从所期望的结果的不同:

{"0":{"0":"τ","1":"π"},"1":{"0":"a","1":"b"},"2":{"0":1,"1":2}} 


我曾尝试添加 force_ascii=False论点:

import pandas as pd 
df = pd.DataFrame([['τ', 'a', 1], ['π', 'b', 2]]) 
df.to_json('df.json', force_ascii=False) 

但是,这提供了以下错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\u03c4' in position 11: character maps to <undefined> 


我使用WinPython 3.4.4.2 64位与大熊猫0.18.0

回答

6

打开文件设置为UTF-编码8,然后将该文件传递到.to_json函数可修复问题:

with open('df.json', 'w', encoding='utf-8') as file: 
    df.to_json(file, force_ascii=False) 

给出正确的:

{"0":{"0":"τ","1":"π"},"1":{"0":"a","1":"b"},"2":{"0":1,"1":2}} 

注意:它仍然需要force_ascii=False参数。