本文主要内容:
1.构造DateFrame的常用方式:使用字段列表
2.使用df.toexcel()生成excel
3.df.read_excel()读取
4.使用df.loc[]获取数据
5.使用plot生成饼图
从http请求接口中获取数据,这一步不写了,直接构造数据
import pandas as pd
import matplotlib.pyplot as plt
# 仿原始数据,content内容省略了,原始数据肯定要比这个复杂,http请求返回数据,直接用response.json返回json格式
data = [{"id": 100, "title": "json*",'content':{"flag":"是"}}, {"id": 101, "title": "python*",'content':{"flag":"是"}},
{"id": 103, "title": "java*",'content':{"flag":"是"}},{"id": 104, "title": "c#*",'content':{"flag":"否"}}
]
def parse_data(content):
for i in content:
yield {"ID": i.get("id"), # 返回生成器
"语言": i.get('title').strip('*'),
"标识":i.get('content').get('flag')
}
datas = parse_data(data)
list1 = []
for data in datas:
list1.append(data)
# 字典列表创建dataframe
#生成dataframe,写入excel
df = pd.DataFrame(list1)
df.to_excel('data001.xlsx', index=False)
第二常用创建df的方式 {"id":ids,"name":names} 其中ids,names为列表,表示列的数据,所有id的列表可用jsonpath获取
生成的excel数据:
image.png
第二步:读取数据,生成饼图
# 先读取excel需安装xlrd
df2 = pd.read_excel('data001.xlsx')
isflag = df2.loc[df2['标识'] == "是", :].shape[0]
# 得到flag是"是"的总行数
noflag = len(df2.loc[df2['标识'] == "否", :])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.axis('equal') # 圆形
labels = ['已覆盖', '未覆盖']
sizes = [isflag, noflag] #
explode = (0, 0.1) # 离开中心距离
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.f%%')
plt.title("覆盖占比")
plt.show()
# plt.savefig('data1.png', figsize=[10, 10]) #保存图片
image.png
网友评论