pandas DataFrame 使用 to_json() 到字典列表
Posted
技术标签:
【中文标题】pandas DataFrame 使用 to_json() 到字典列表【英文标题】:pandas DataFrame to list of dicts using to_json() 【发布时间】:2018-10-22 05:56:43 【问题描述】:所以,我正在用 pandas 读取 xlsx 文件,然后解析日期时间(excel 是浮点数)
然后我需要把它解析成Json,我遇到了一些问题。
第 1 步(使用 to_json() 解析之前)
df = pandas.read_excel('test.xlsx', names=['date', 'value', 'source'])
df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f')
print(df)
回报是
date value source
0 2012-05-22 1 xxxxxxxxxxxxxxxxxxxx
1 2012-05-25 1 xxxxxxxxxxxxx
2 2012-05-30 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3 2012-06-01 1 xxxxxxxxxx
4 2012-06-08 1 xxxxxxxxxxxxxxxxx
一切似乎都很好,然后我得到了 o to_json
payload = df.to_json()
而回报是
"date":"0":1337644800000,"1":1337904000000,"2":1338336000000,"3":1338508800000,"4":1339113600000,"value":"0":1,"1":1,"2":1,"3":1,"4":1,"source":"0":"xxxxxxxxxxxxxxx","1":"xxxxxxxxxx","2":"xxxxxxxxxxx","3":"xxxxxxxxxxxxxxxx","4":"xxxxxxxxxxxxxxx"
那么我做错了什么?我在 to_json() 上缺少 args 吗?哈尔普请:c
我需要它是这样的:
["date":"2012-05-22","value":1,"source":"xxxxxxxxxxxxxxxxxxxx",
"date":"2012-05-25","value":1,"source":"xxxxxxxxxxxxxxxxxxxx",
"date":"2012-05-30","value":1,"source":"xxxxxxxxxxxxxxxxxxxxx",
"date":"2012-06-01","value":1,"source":"xxxxxxxxxxxxxxxxxxxx",
"date":"2012-06-08","value":1,"source":"xxxxxxxxxxxxxxxxxxxxxx"]
【问题讨论】:
看起来您的日期时间对象被强制转换为 unix 时间戳。这是一个问题吗?你想要它是什么?字符串?然后只需执行df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f').astype(str)
并照常进行。
已编辑!对不起:p
您也可以使用df.to_json(orient='records')
来获得所需的输出。
@GabrielFernandes 是的,在我写的答案中已经提到过。干杯。
【参考方案1】:
您需要进行一些修复——
-
将您的日期列转换为字符串,因为就目前而言,您的日期时间列被强制转换为 Unix 整数时间戳。或者,按照其他答案的建议,将
date_format
参数与 to_json
一起使用。
保存为json时改变方向;指定orient='records'
。
df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f').astype(str)
payload = df.to_json(orient='records')
print(payload)
'["date":"2012-05-22","source":"xxxxxxxxxxxxxxxxxxxx","value":1,"date":"2012-05-25","source":"xxxxxxxxxxxxxxxxxxxx","value":1,"date":"2012-05-30","source":"xxxxxxxxxxxxxxxxxxxxx","value":1,"date":"2012-06-01","source":"xxxxxxxxxxxxxxxxxxxx","value":1,"date":"2012-06-08","source":"xxxxxxxxxxxxxxxxxxxxxx","value":1]'
【讨论】:
【参考方案2】:虽然如果您转换为字符串(如其他问题和 cmets 中所述)您可以获得所需的格式,但您可能不需要。查看 to_json()
parameter date_format
。我相信你想要.to_json(..., date_format='iso')
。
根据date_format
参数的文档:
对于 orient='table',默认为'iso'。对于所有其他方向,默认值为“epoch”。
【讨论】:
这将导致日期格式类似于2012-05-22T00:00:00.000Z
,这不是 OP 想要的输出。以上是关于pandas DataFrame 使用 to_json() 到字典列表的主要内容,如果未能解决你的问题,请参考以下文章
使用另一个 pandas DataFrame 更新存储在 Pytable 中的 pandas DataFrame
#pandas使用merge函数将两个pandas dataframe通过笛卡尔积(cartesian product)方式连接起来生成新的dataframe数据