首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将嵌套的json文件加载到熊猫DataFrame中

如何将嵌套的json文件加载到熊猫DataFrame中
EN

Stack Overflow用户
提问于 2021-11-26 09:12:32
回答 2查看 2K关注 0票数 1

请帮助,我似乎不能将json数据放入Dataframe中。

加载数据

data =json.load(open(r'path'))#this works fine and displays:

json数据

代码语言:javascript
运行
复制
{'type': 'FeatureCollection', 'name': 'Altstadt Nord', 'crs': {'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:OGC:1.3:CRS84'}}, 'features': [{'type': 'Feature', 'properties': {'Name': 'City-Martinsviertel', 'description': None}, 'geometry': {'type': 'Polygon', 'coordinates': [[[6.9595637, 50.9418396], [6.956624, 50.9417382], [6.9543173, 50.941603], [6.9529869, 50.9413664], [6.953062, 50.9408593], [6.9532873, 50.9396289], [6.9533624, 50.9388176], [6.9529333, 50.9378373], [6.9527509, 50.9371815], [6.9528367, 50.9360659], [6.9532122, 50.9352884], [6.9540705, 50.9350653], [6.9553258, 50.9350044], [6.9568815, 50.9351667], [6.9602074, 50.9355047], [6.9608189, 50.9349165], [6.9633939, 50.9348827], [6.9629433, 50.9410622], [6.9616236, 50.9412176], [6.9603898, 50.9414881], [6.9595637, 50.9418396]]]}}, {'type': 'Feature', 'properties': {'Name': 'Gereonsviertel', 'description': None}, 'geometry': {'type': 'Polygon', 'coordinates': [[[6.9629433, 50.9410622], [6.9629433, 50.9431646], [6.9611408, 50.9433539], [6.9601752, 50.9436649], [6.9588234, 50.9443409], [6.9579651, 50.9449763], [6.9573213, 50.945801], [6.9563128, 50.9451926], [6.9551756, 50.9448546], [6.9535663, 50.9446518], [6.9523432, 50.9449763], [6.9494464, 50.9452602], [6.9473435, 50.9454495], [6.9466998, 50.9456928], [6.9458415, 50.946531], [6.9434168, 50.9453954], [6.9424726, 50.9451926], [6.9404342, 50.9429888], [6.9404771, 50.9425156], [6.9403269, 50.9415016], [6.9400479, 50.9405281], [6.9426228, 50.9399872], [6.9439103, 50.9400143], [6.9453051, 50.9404875], [6.9461634, 50.9408931], [6.9467427, 50.941096], [6.9475581, 50.9410013], [6.9504227, 50.9413191], [6.9529869, 50.9413664], [6.9547464, 50.9416368], [6.9595637, 50.9418396], [6.9603898, 50.9414881], [6.9616236, 50.9412176], [6.9629433, 50.9410622]]]}}, {'type': 'Feature', 'properties': {'Name': 'Kunibertsviertel', 'description': None}, 'geometry': {'type': 'Polygon', 'coordinates': [[[6.9629433, 50.9431646], [6.9637129, 50.9454917], [6.9651506, 50.9479252], [6.9666097, 50.9499124], [6.9667599, 50.9500882], [6.9587777, 50.9502504], [6.9573213, 50.945801], [6.9579651, 50.9449763], [6.9588234, 50.9443409], [6.9601752, 50.9436649], [6.9611408, 50.9433539], [6.9629433, 50.9431646]]]}}, {'type': 'Feature', 'properties': {'Name': 'Nördlich Neumarkt', 'description': None}, 'geometry': {'type': 'Polygon', 'coordinates': [[[6.9390331, 50.9364418], [6.9417153, 50.9358738], [6.9462214, 50.9358062], [6.9490109, 50.9355628], [6.9505129, 50.9353329], [6.9523798, 50.9352924], [6.9532122, 50.9352884], [6.9528367, 50.9360659], [6.9527509, 50.9371815], [6.9529333, 50.9378373], [6.9533624, 50.9388176], [6.9532381, 50.9398222], [6.9529869, 50.9413664], [6.9504227, 50.9413191], [6.9475581, 50.9410013], [6.9467427, 50.941096], [6.9453051, 50.9404875], [6.9439103, 50.9400143], [6.9424663, 50.9399574], [6.9400479, 50.9405281], [6.9390331, 50.9364418]]]}}]}

现在,我似乎无法将它安装到Dataframe // pd.DataFrame(data) --> ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.全误差中。

虽然我通过pip安装安装了json-flatten,但我尝试使用json_flatten来使其平坦,但是ModuleNotFoundError: No module named 'flatten_json'也是如此。

也尝试过df =pd.DataFrame.from_dict(data,orient='index')

代码语言:javascript
运行
复制
df
Out[22]: 
                                                          0
type                                      FeatureCollection
name                                          Altstadt Nord
crs       {'type': 'name', 'properties': {'name': 'urn:o...
features  [{'type': 'Feature', 'properties': {'Name': 'C...

df Out[22]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-26 14:53:18

我想你可以用json_normalize把它们装到熊猫身上。

在本例中,test.json是完整的json文件(带有双引号)。

代码语言:javascript
运行
复制
import json
from pandas.io.json import json_normalize

with open('path_to_json.json') as f:
  data = json.load(f)
  df = json_normalize(data, record_path=['features'], meta=['name']) 

print(df)

这将产生数据格式,如下所示。

您可以在normalize方法中进一步添加记录字段,以便为多边形坐标创建更多列。

您可以在normalize.html上找到更多文档。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2021-11-26 09:36:47

json数据包含具有不同数据类型的元素,这些数据类型不能加载到单个数据中。

查看json中的数据类型:

代码语言:javascript
运行
复制
[type(data[k]) for k in data.keys()]
# Out: [str, str, dict, list]

data.keys()
# Out: dict_keys(['type', 'name', 'crs', 'features'])

您可以将每个数据块加载到一个单独的数据块中,如下所示:

代码语言:javascript
运行
复制
df_crs = pd.DataFrame(data['crs'])
df_features = pd.DataFrame(data['features'])

data['type']data['name']是字符串

代码语言:javascript
运行
复制
data['type']
# Out 'FeatureCollection'

data['name']
# Out 'Altstadt Nord'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70121956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档