【发布时间】:2017-06-19 14:38:04
【问题描述】:
我有一个来自 mongoexport 的 JSON 数组,其中包含来自 Beddit sleeptracker 的数据。下面是截断文档之一的示例(删除了一些不需要的细节)。
{
"user" : "xxx",
"provider" : "beddit",
"date" : ISODate("2016-11-30T23:00:00.000Z"),
"data" : [
{
"end_timestamp" : 1480570804.26226,
"properties" : {
"sleep_efficiency" : 0.8772404,
"resting_heart_rate" : 67.67578,
"short_term_resting_heart_rate" : 61.36963,
"activity_index" : 50.51958,
"average_respiration_rate" : 16.25667,
"total_sleep_score" : 64,
},
"date" : "2016-12-01",
"session_range_start" : 1480545636.55059,
"start_timestamp" : 1480545636.55059,
"session_range_end" : 1480570804.26226,
"tags" : [
"not_enough_sleep",
"long_sleep_latency"
],
"updated" : 1480570805.25201
}
],
"__v" : 0
}
this 和this 等几个相关问题似乎不适用于上述数据结构。正如其他相关问题中所建议的那样,出于性能原因,我试图避免循环遍历每一行(完整数据集约为 150MB)。我将如何使用 json_normalize 展平 "data"-key,以便每个 key 都位于顶层?我更喜欢一个 DataFrame,例如total_sleep_score 是一列。
非常感谢任何帮助!尽管我知道如何使用 JavaScript 来“准备”数据,但我希望能够理解并使用 Python 来完成。
编辑(请求评论以显示首选结构):
{
"user" : "xxx",
"provider" : "beddit",
"date" : ISODate("2016-11-30T23:00:00.000Z"),
"end_timestamp" : 1480570804.26226,
"properties.sleep_efficiency" : 0.8772404,
"properties.resting_heart_rate" : 67.67578,
"properties.short_term_resting_heart_rate" : 61.36963,
"properties.activity_index" : 50.51958,
"properties.average_respiration_rate" : 16.25667,
"properties.total_sleep_score" : 64,
"date" : "2016-12-01",
"session_range_start" : 1480545636.55059,
"start_timestamp" : 1480545636.55059,
"session_range_end" : 1480570804.26226,
"updated" : 1480570805.25201,
"__v" : 0
}
“属性”附加不是必需的,但会很好。
【问题讨论】:
-
你能提供一个数据应该是什么样子的例子吗?
-
刚刚编辑了原帖。
-
如果此 JSON-Object 的格式始终相同,如果您不想循环访问该对象,则可以简单地将 JSON 转换为字符串并操作该字符串。但我不确定这是否会带来更好的性能。
-
“属性”中的参数并不总是相同的。在某些夜晚,某些参数无法计算,因此从通过 API 接收的数据中省略了这些参数。
-
那么我看不到在不以任何方式迭代的情况下转换 json 的可能性。
标签: python json pandas dataframe