Pandas DataFrame to_json()导致带点符号的索引

时间:2015-03-03 20:38:41

标签: json python-2.7 pandas

我有一个Pandas DataFrame需要转换为JSON。 to_json() DataFrame方法生成可接受的格式,但它将我的DataFrame索引转换为字符串(例如0变为“0.0”)。我需要“0”。

DataFrame使用pd.io.json.read_json()方法来自JSON,该方法将索引设置为float64。

输入JSON:

{"chemical": {"1": "chem2", "0": "chem1"}, 
"type": {"1": "pesticide", "0": "pesticide"}}

DataFrame(来自read_json()):

  chemical  type
0 chem1    pesticide
1 chem2    pesticide

制作JSON(来自to_json()):

{"chemical": {"0.0": "chem1", "1.0": "chem2"},
"type": {"0.0": "pesticide", "1.0": "pesticide"}}

需要JSON:

{"chemical": {"0": "chem1", "1": "chem2"},
"type": {"0": "pesticide", "1": "pesticide"}}

2 个答案:

答案 0 :(得分:1)

@ shx2指出了我正确的方向,但我改变了从JSON创建DataFrame的方法。

我没有在JSON字符串上使用to_json()方法,而是使用JSON上的pd.DataFrame.from_dict()方法作为Python字典来创建DataFrame。这导致df.index.dtype == dtype('O')

我必须在dtype='float64'方法中设置from_dict(),以便为非字符串条目设置正确的dtype。

pd_obj = pd.DataFrame.from_dict(request.json["inputs"], dtype='float64')

答案 1 :(得分:0)

似乎索引的dtype是float(检查df.index.dtype)。您需要将其转换为int:

df.index = df.index.astype(int)
df.to_json()
=> {"chemical": {"0": "chem1", "1": "chem2"}, "type": {"0": "pesticide", "1": "pesticide"}}