如何在python中将JSON转换为数据框

Posted

技术标签:

【中文标题】如何在python中将JSON转换为数据框【英文标题】:How to convert JSON to a Dataframe in python 【发布时间】:2017-05-25 20:25:55 【问题描述】:

我有以下 JSON 格式,我需要将其转换为 python 中的数据框。请告诉我,如何去做。

JSON:

 User Patterns
["Jane": ["Thermostat": 20, "Days": [1, 2], "Hour": 6, "Minute": 43],  
"John": ["Thermostat": 18, "Days": [1, 2], "Hour": 0, "Minute": 15], 
"Jen": ["Thermostat": 22, "Days": [1, 2], "Hour": 10, "Minute": 1]]

我希望我的数据框看起来像:

User    Thermostat   Days     Hour   Minute
Jane    20           [1,2]    6      43  
John    18           [1,2]    0      15 
Jen     22           [1,2]    10     1

【问题讨论】:

你可以使用pd.read_json(userpatterns) 存储 JSON 的变量是“th_pat”。如果我做 pd.read_jso(th_pat)。它给我一个错误 【参考方案1】:
jstr = """["Jane": ["Thermostat": 20, "Days": [1, 2], "Hour": 6, "Minute": 43],  
"John": ["Thermostat": 18, "Days": [1, 2], "Hour": 0, "Minute": 15], 
"Jen": ["Thermostat": 22, "Days": [1, 2], "Hour": 10, "Minute": 1]]"""

pd.DataFrame.from_dict(
    k: v[0] for k, v in json.loads(jstr)[0].items(), 'index'
).rename_axis('User').reset_index()


如果要拆分Days

df = pd.DataFrame.from_dict(
    k: v[0] for k, v in json.loads(jstr)[0].items(), 'index'
).rename_axis('User').reset_index()

df.drop('Days', 1).join(
    pd.DataFrame(df.Days.tolist()).rename(columns='Day'.format))


您可以对其进行功能化:

def read_my_json(jstr):
    return pd.DataFrame.from_dict(
        k: v[0] for k, v in json.loads(jstr)[0].items(), 'index'
    ).rename_axis('User').reset_index()

【讨论】:

谢谢,但是这个 JSON 存储在一个名为“th_pat”的变量中。并且对于每个实验,恒温器、天等的值都会改变。因此,我该怎么做 当然,它奏效了。谢谢你。我有一个相关的问题,这可以在函数中返回吗?如果这样做,我会收到以下错误:NotImplementedError: Python Bridge conversion table not implemented for type [] 我又遇到了一个小问题。对于“天”列,它有两个值,即 [1,2]。因此,在返回时,它会抛出一个错误,因为它无法解析该列表。如何修改代码以使每个值都在单独的列中,并且值可能会增加,例如 [1,2,3] 等。所以是否有通用代码,所以这些值中的每一个都可以被视为不同的列 @Anagha 没问题。很高兴我能帮上忙。 如果每个用户都有多条记录,我们将如何遍历 JSON?

以上是关于如何在python中将JSON转换为数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将数据框转换为数组? [复制]

如何在Python中将字符串转换为数据框[重复]

如何在pyspark中将JSON字符串转换为JSON对象

如何在python中将字符串转换为pandas数据框[重复]

如何在python中将文本字符串列表转换为熊猫数据框?

如何在 JavaScript 中将字符串转换为 JSON?