首页Python【Python数据分析】2...

【Python数据分析】29.JSON数据的读写操作


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————-————————————-

JSON(JavaScript Object Notation的简称)已成为Web浏览器和其他应用程序之间通过HTTP请求发送数据的标准格式之一。与CSV这样的表格形式相比,是一种更自由的数据格式。

例如(百度地图地点检索api获取的json数据简化):

 1obj = """{
2"
status": 0,
3"
message": "ok",
4"
results":[{"name": "中国民生银行(安定门支行)",
5             "
location": {"lat": 39.971315,"lng": 116.413576},
6             "
address": "北京市朝阳区安定门外大街1号"
7            },{
8             "
name": "北京银行(中轴路支行)", 
9             "
location": {"lat": 39.957457,"lng": 116.40428},
10             "
address": "北京市东城区安德路16号(洲际大厦首层)"
11            },{
12             "
name": "交通银行(北京和平里支行)", 
13             "
location": {"lat": 39.968787,"lng": 116.410049}, 
14             "
address": "北京市朝阳区外馆东街51号"
15            },{
16             "
name": "中国进出口银行(北京分行)",
17             "
location": {"lat": 39.934898,"lng": 116.411758},
18             "
address": "北京市东城区北河沿大街77号"
19            },{
20             "
name": "中国工商银行(北京地坛支行)",
21             "
location": {"lat": 39.965762,"lng": 116.412735},
22             "
address": "北京市东城区安外大街9号"
23}
24]}"
""

JSON 非常接近有效的 Python 代码,除了它的空值 null 和其他一些细微差别(例如不允许在列表末尾使用逗号)。基本类型是对象(字典)、数组(列表)、字符串、数字、布尔值和空值。对象中的所有键都必须是字符串。

  • json.loads()

有几个用于读取和写入 JSON 数据的 Python 库。本次使用 json,因为它是 Python 的内置标准库。使用 json.loads 方法可以将JSON 字符串转换为 Python 形式。

 1>>> result = json.loads(obj)
2>>> result
3{'status'0,
4 'message''ok',
5 'results': [{'name''中国民生银行(安定门支行)',
6   'location': {'lat'39.971315'lng'116.413576},
7   'address''北京市朝阳区安定门外大街1号'},
8  {'name''北京银行(中轴路支行)',
9   'location': {'lat'39.957457'lng'116.40428},
10   'address''北京市东城区安德路16号(洲际大厦首层)'},
11  {'name''交通银行(北京和平里支行)',
12   'location': {'lat'39.968787'lng'116.410049},
13   'address''北京市朝阳区外馆东街51号'},
14  {'name''中国进出口银行(北京分行)',
15   'location': {'lat'39.934898'lng'116.411758},
16   'address''北京市东城区北河沿大街77号'},
17  {'name''中国工商银行(北京地坛支行)',
18   'location': {'lat'39.965762'lng'116.412735},
19   'address''北京市东城区安外大街9号'}]}
  • json.dumps ()
使用 json.dumps 方法可以将python对象转换为json数据格式。
1>>> asjson = json.dumps(result)
2>>> asjson
3'{"status": 0, "message": "ok", "results": [{"name": "\u4e2d\u56fd\u6c11\u751f\u94f6\u884c(\u5b89\u5b9a\u95e8\u652f\u884c)", "location": {"lat": 39.971315, "lng": 116.413576}, "address": "\u5317\u4eac\u5e02\u671d\u9633\u533a\u5b89\u5b9a\u95e8\u5916\u5927\u88571\u53f7"}, {"name": "\u5317\u4eac\u94f6\u884c(\u4e2d\u8f74\u8def\u652f\u884c)", "location": {"lat": 39.957457, "lng": 116.40428}, "address": "\u5317\u4eac\u5e02\u4e1c\u57ce\u533a\u5b89\u5fb7\u8def16\u53f7(\u6d32\u9645\u5927\u53a6\u9996\u5c42)"}, {"name": "\u4ea4\u901a\u94f6\u884c(\u5317\u4eac\u548c\u5e73\u91cc\u652f\u884c)", "location": {"lat": 39.968787, "lng": 116.410049}, "address": "\u5317\u4eac\u5e02\u671d\u9633\u533a\u5916\u9986\u4e1c\u885751\u53f7"}, {"name": "\u4e2d\u56fd\u8fdb\u51fa\u53e3\u94f6\u884c(\u5317\u4eac\u5206\u884c)", "location": {"lat": 39.934898, "lng": 116.411758}, "address": "\u5317\u4eac\u5e02\u4e1c\u57ce\u533a\u5317\u6cb3\u6cbf\u5927\u885777\u53f7"}, {"name": "\u4e2d\u56fd\u5de5\u5546\u94f6\u884c(\u5317\u4eac\u5730\u575b\u652f\u884c)", "location": {"lat": 39.965762, "lng": 116.412735}, "address": "\u5317\u4eac\u5e02\u4e1c\u57ce\u533a\u5b89\u5916\u5927\u88579\u53f7"}]}'
  • 将json数据转换为Pandas数据格式

可以将字典列表(以前是 JSON 对象)传递给 DataFrame 构造函数并选择数据字段的子集,将 JSON 对象或对象列表转换为 DataFrame 或其他数据结构。

1>>> siblings = pd.DataFrame(result["results"], columns=["name",  "address"])
2>>> siblings

  • pandas.read_json()

pandas.read_json方法可以自动将json数据按照指定次序转换为Pandas数据格式。

例如,“data/example.json”文件内容如下所示:

1[{"a"1"b"2"c"3},
2 {"a"4"b"5"c"6},
3 {"a"7"b"8"c"9}]

通过pandas.read_json方法将json数据转换为Pandas数据格式。

1>>> data = pd.read_json("data/example.json")
2>>> data

  • to_json()

如果您需要将数据从 pandas 导出到 JSON,一种方法是在 Series 和 DataFrame 上使用 to_json 方法。

1>>> data.to_json(sys.stdout)
2{"a":{"0":1,"1":4,"2":7},"b":{"0":2,"1":5,"2":8},"c":{"0":3,"1":6,"2":9}}
3
4>>> data.to_json(sys.stdout , orient="records")
5[{"a":1,"b":2,"c":3},{"a":4,"b":5,"c":6},{"a":7,"b":8,"c":9}]


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments