本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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 ()
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}]
本篇文章来源于微信公众号: 码农设计师