当前位置: 首页 > 面试题库 >

熊猫读嵌套的json

郎鸿朗
2023-03-14
问题内容

我很好奇如何使用熊猫读取以下结构的嵌套json:

{
    "number": "",
    "date": "01.10.2016",
    "name": "R 3932",
    "locations": [
        {
            "depTimeDiffMin": "0",
            "name": "Spital am Pyhrn Bahnhof",
            "arrTime": "",
            "depTime": "06:32",
            "platform": "2",
            "stationIdx": "0",
            "arrTimeDiffMin": "",
            "track": "R 3932"
        },
        {
            "depTimeDiffMin": "0",
            "name": "Windischgarsten Bahnhof",
            "arrTime": "06:37",
            "depTime": "06:40",
            "platform": "2",
            "stationIdx": "1",
            "arrTimeDiffMin": "1",
            "track": ""
        },
        {
            "depTimeDiffMin": "",
            "name": "Linz/Donau Hbf",
            "arrTime": "08:24",
            "depTime": "",
            "platform": "1A-B",
            "stationIdx": "22",
            "arrTimeDiffMin": "1",
            "track": ""
        }
    ]
}

这使数组保持为json。我宁愿将其扩展为列。

pd.read_json("/myJson.json", orient='records')

感谢您的第一个答案。我应该提一下我的问题:数组中嵌套属性的拼合不是强制性的。仅将[A,B,C]连接df.locations [‘name’]就可以了。

我的文件包含多个JSON对象(每行1个),我想保留number,date,name和location列。但是,我需要加入这些地点。

allLocations = ""
isFirst = True
for location in result.locations:
    if isFirst:
        isFirst = False
        allLocations = location['name']
    else:
        allLocations += "; " + location['name']
allLocations

我在这里的方法似乎不是高效/熊猫风格。


问题答案:

您可以使用json_normalize

import json
from pandas.io.json import json_normalize

with open('myJson.json') as data_file:    
    data = json.load(data_file)

df = json_normalize(data, 'locations', ['date', 'number', 'name'], 
                    record_prefix='locations_')
print (df)
  locations_arrTime locations_arrTimeDiffMin locations_depTime  \
0                                                        06:32   
1             06:37                        1             06:40   
2             08:24                        1

  locations_depTimeDiffMin           locations_name locations_platform  \
0                        0  Spital am Pyhrn Bahnhof                  2   
1                        0  Windischgarsten Bahnhof                  2   
2                                    Linz/Donau Hbf               1A-B

  locations_stationIdx locations_track number    name        date  
0                    0          R 3932         R 3932  01.10.2016  
1                    1                         R 3932  01.10.2016  
2                   22                         R 3932  01.10.2016

编辑:

你可以用read_json与解析nameDataFrame构造函数,并最后groupby与应用join

df = pd.read_json("myJson.json")
df.locations = pd.DataFrame(df.locations.values.tolist())['name']
df = df.groupby(['date','name','number'])['locations'].apply(','.join).reset_index()
print (df)
        date    name number                                          locations
0 2016-01-10  R 3932         Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...


 类似资料:
  • 问题内容: 我经常使用pandas groupby生成堆积表。但是然后我经常想将生成的嵌套关系输出到json。有什么方法可以从生成的堆叠表中提取嵌套的json文件吗? 假设我有一个df,例如: 我可以: 美丽!当然,我真正想做的是通过命令沿着grouped.to_json嵌套嵌套的json。但是该功能不可用。任何解决方法? 所以,我真正想要的是这样的: 唐 问题答案: 我认为熊猫没有内置任何东西可

  • 我的数据如下所示: 内部数组的长度始终相同。键1、键2、键3也始终相同。 我想将其转换为熊猫DataFrame,其中outer_key1,outer_key2,...是索引,key1,key2,key3是列。 编辑: 数据中存在一个问题,我认为这就是给定解决方案不起作用的原因。在少数情况下,内部数组中有三个s,而不是三个字典。这样地:

  • 问题内容: 我正在尝试将json文件加载到熊猫数据框。我发现有一些嵌套的json。以下是示例json: 我使用以下代码将json加载到数据帧中: 以下是df.head()的输出 但是我发现了两个嵌套的列,例如位置和标签。 我尝试使用以下代码对其进行展平: 它显示了如下错误: 您能建议我如何展平位置和标签(那些具有嵌套数据的位置和标签)。 谢谢,Zep 问题答案: 如果您正在寻找一种更通用的方法来从

  • 我正在使用谷歌云视频智能API,我正在尝试将结果放入一个数据框中。API的输出类是repeatedcompositecontainer。因此,我的想法是在API函数中使用的for循环中构建一个数据帧。 以下是API函数处理结果的方式: 在这篇Stack Overflow文章的帮助下,我创建了一个空列表,并将结果附加到后面的数据框中,如下所示: 当我只尝试最后一个for循环时,它给了我一个很好的结构

  • 问题内容: 在我正在处理的集合中,文档如下所示: 我写了这个Mongoose模式来访问它: 当我查询文档时,一切正常,控制台中显示的输出正确。但是当我尝试执行console.log(myDoc.stuff)时,得到了以下信息: 代替 我究竟做错了什么?谢谢您的帮助!! 问题答案: 免责声明:此回复的日期过早,2012年!这可能不是最准确的。 从猫鼬的文档。 http://mongoosejs.co

  • 问题内容: 我有以下JSON,如下所示。我正在尝试读取值TOP1,TOP2。我不太确定该如何做。 我正在使用以下..但这只是给我一个对象,该对象具有用于TOP1和TOP2的嵌套对象。如何获取值TOP1和TOP2? 和下面的数据 问题答案: 您似乎想通过循环,因此请更改以下内容: 对此: 现在,您正在使用该对象遍历该对象数组, 这些 对象就是具有属性的对象,例如:和。