【发布时间】:2018-07-14 09:21:48
【问题描述】:
我正在尝试将从 api 收到的 json 解析为 pandas DataFrame。那个 json 是分层的,在这个例子中,我有城市代码、线路名称和这条线路的车站列表。不幸的是,我无法“解包”它。非常感谢您的帮助和解释。
json:
{'id': '1',
'lines': [{'hex_color': 'FFCD1C',
'id': '8',
'name': 'Калининская', <------Line name
'stations': [{'id': '8.189',
'lat': 55.745113,
'lng': 37.864052,
'name': 'Новокосино', <------Station 1
'order': 0},
{'id': '8.88',
'lat': 55.752237,
'lng': 37.814587,
'name': 'Новогиреево', <------Station 2
'order': 1},
etc.
我正在尝试从最低级别接收所有信息并添加所有更高级别的信息(从 linename 开始):
c = r.content
j = simplejson.loads(c)
tmp=[]
i=0
data1=pd.DataFrame(tmp)
data2=pd.DataFrame(tmp)
pd.concat
station['name']
for station in j['lines']:
data2 = data2.append(pd.DataFrame(station['stations'], station['name']),ignore_index=True)
data2
再一次 - 问题是: 如何让它发挥作用? 这个解决方案是最佳解决方案,还是我应该了解一些功能?
更新: Json 解析正常:
json_normalize(j)
id lines name
1 [{'hex_color': 'FFCD1C', 'stations': [{'lat': ... Москва
我能得到的当前DataFrame:
data2 = data2.append(pd.DataFrame(station['stations']),ignore_index=True)
id lat lng name order
0 8.189 55.745113 37.864052 Новокосино 0
1 8.88 55.752237 37.814587 Новогиреево 1
所需的数据框可以表示为:
id lat lng name order Line_Name Id_Top Name_Top
0 8.189 55.745113 37.864052 Новокосино 0 Калининская 1 Москва
1 8.88 55.752237 37.814587 Новогиреево 1 Калининская 1 Москва
【问题讨论】:
-
请发布包含至少两个顶级元素(
'id': '1'和'id': '2')的 JSON,并确保它可以被解析(它应该是有效的 JSON/字典)并提供您的所需的数据集 -
@MaxU 很有趣,但我正在使用的 Json 现在只有 1 个顶级元素。我会在一分钟内编辑问题。
-
好的,你能发布你想要的数据集/DF吗?
标签: python json pandas dataframe