Pandas to_json改变数据类型

7

我注意到这种行为,不确定它是否是一个错误。 我创建了一个包含2个整数列和1个浮点列的数据框。

import pandas as pd
df = pd.DataFrame([[1,2,0.2],[3,2,0.1]])
df.info()


<class 'pandas.core.frame.DataFrame'>
Int64Index: 2 entries, 0 to 1
Data columns (total 3 columns):
0    2 non-null int64
1    2 non-null int64
2    2 non-null float64
dtypes: float64(1), int64(2)

如果我将其输出为Json,dtype信息将丢失:
df.to_json(orient= 'records')

'[{"0":1.0,"1":2.0,"2":0.2},{"0":3.0,"1":2.0,"2":0.1}]'

所有数据都会转换为浮点数。如果例如一列包含ns时间戳,那么它们将被转换为指数符号并且毫秒信息将丢失,这是个问题。

我还在这里提交了一个问题:https://github.com/pydata/pandas/issues/7583

我期望的结果是:

'[{"0":1,"1":2,"2":0.2},{"0":3,"1":2,"2":0.1}]'

这个问题似乎不适合讨论,因为它是一个错误报告(应该并且已经在Github上提交了)。 - Andy Hayden
3
我猜问题是,我如何输出一个符合我期望格式的JSON? - Fra
1个回答

2

一种方法是查看具有对象数据类型的DataFrame列:

In [11]: df1 = df.astype(object)

In [12]: df1.to_json()
Out[12]: '{"0":{"0":1,"1":3},"1":{"0":2,"1":2},"2":{"0":0.2,"1":0.1}}'

In [13]: df1.to_json(orient='records')
Out[13]: '[{"0":1,"1":2,"2":0.2},{"0":3,"1":2,"2":0.1}]'

是的,那个可以运行,但似乎会使执行速度变慢6倍。 - Fra
它对我无效。我的pandas版本是1.2.4。当我运行df.info()时,列的Dtype为对象,但df.to_json()也将int写为float。 - yicone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接