anaconda+python+pycharm代码学习——自动化办公(五)——使用pandas快速整理excel数据

用数据分析库 Pandas 导入数据

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 13 11:12:40 2022

@author:Laney_Midory
csdn:Laney_Midory
"""
import pandas as pd

'''
#创建一维数据组
a=pd.Series(['a','b','c','d','e'])#索引+数据
print(a)
#创建二维数据
b=pd.DataFrame({'客户名称':['张三','李四','王五'],'车':['1','3','4'],'吨数':['40','100','200'],
                    '总价':['80000','240000','320000']  })
print(b)
'''

#倒入excel里的数据 pandas读取excel
e_file=pd.ExcelFile('C:/Users/Administrator/Desktop/excelcode/7月下旬入库表.xlsx')
#整理成需要的数据
data=e_file.parse('7月下旬入库表')
print(data)

用数据分析库 Pandas 做数据透视表

需要引入一个新库numpy

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 13 11:12:40 2022

@author:Laney_Midory
csdn:Laney_Midory
"""
import pandas as pd
import numpy as np
'''
#创建一维数据组
a=pd.Series(['a','b','c','d','e'])#索引+数据
print(a)
#创建二维数据
b=pd.DataFrame({'客户名称':['张三','李四','王五'],'车':['1','3','4'],'吨数':['40','100','200'],
                    '总价':['80000','240000','320000']  })
print(b)
'''

#倒入excel里的数据 pandas读取excel
e_file=pd.ExcelFile('C:/Users/Administrator/Desktop/excelcode/7月下旬入库表.xlsx')
#整理成需要的数据
data=e_file.parse('7月下旬入库表')
#print(data)

#数据透视表 数据求和需要用numpy库
pt1=pd.pivot_table(data,index=['销售商'],columns=['来源省份'],values=['入库量(吨)'],aggfunc=np.sum,margins=True)#index为行,column为列,values设定值,aggfunc为添加函数进行数据相加,margins为添加总和
#由于数据量过大,数据在显示过程中由小数点简略,需要显示全
pd.set_option('display.max_columns',None)
#打印有几个
pt2=pd.pivot_table(data,index=['销售商'],columns=['来源省份'],values=['入库量(吨)'],aggfunc=np.size,margins=True)#index为行,column为列,values设定值,aggfunc为添加函数进行数据相加,margins为添加总和
#由于数据量过大,数据在显示过程中由小数点简略,需要显示全

print(pt1)
#若想取其中某一个值
print(pt1.iat[0,0])
print(pt2.iat[0,0]

用 matplotlib 画折线图、柱状图、饼图

进行数据可视化 基础功能介绍

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 13 11:12:40 2022

@author:Laney_Midory
csdn:Laney_Midory
"""
import matplotlib.pyplot as plt
#该库用于绘图,但有一个缺点,对于中文的支持不太好,需要添加下面的内容
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签

data=['1/1','1/2','1/3']
hebei=[12,23,6]


#折线图
plt.plot(data,hebei,color='red',label='河北')

plt.title('每日入库量对比')
plt.xlabel('日期')
plt.ylabel('车次')
#刻印 表示在图上
plt.legend()
plt.show()

#柱状图
plt.bar(data,hebei,color='red',label='河北')
#水平柱状图
#plt.barh(data,hebei,color='red',label='河北')
plt.legend()
plt.show()

#饼图
number=[666,354]
province=['河北','山西']
colors=['#999fff','#fff999']
plt.pie(x=number,labels=province,colors=colors)
plt.legend()
plt.show()

结合excel数据进行绘图——前几个步骤结合

直接是把前面我们读取的excel数据利用plot可视化出来

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 13 11:12:40 2022

@author:Laney_Midory
csdn:Laney_Midory
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
'''
#创建一维数据组
a=pd.Series(['a','b','c','d','e'])#索引+数据
print(a)
#创建二维数据
b=pd.DataFrame({'客户名称':['张三','李四','王五'],'车':['1','3','4'],'吨数':['40','100','200'],
                    '总价':['80000','240000','320000']  })
print(b)
'''

#倒入excel里的数据 pandas读取excel
e_file=pd.ExcelFile('C:/Users/Administrator/Desktop/excelcode/7月下旬入库表.xlsx')
#整理成需要的数据
data=e_file.parse('7月下旬入库表')
#print(data)

#数据透视表 数据求和需要用numpy库
pt1=pd.pivot_table(data,index=['销售商'],columns=['来源省份'],values=['入库量(吨)'],aggfunc=np.sum,margins=True)#index为行,column为列,values设定值,aggfunc为添加函数进行数据相加,margins为添加总和
#由于数据量过大,数据在显示过程中由小数点简略,需要显示全
pd.set_option('display.max_columns',None)
#打印有几个
pt2=pd.pivot_table(data,index=['销售商'],columns=['来源省份'],values=['入库量(吨)'],aggfunc=np.size,margins=True)#index为行,column为列,values设定值,aggfunc为添加函数进行数据相加,margins为添加总和
#由于数据量过大,数据在显示过程中由小数点简略,需要显示全

plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号

# pt2.plot()#折线图
# plt.show()

#柱状图
pt2.plot(kind='bar')
#若要旋转label
plt.xticks(rotation=0 )
plt.title('各省入库量对比')
plt.xlabel('客户')
plt.ylabel('入库量')
plt.legend()
plt.show()
# print(pt1)
# #若想取其中某一个值
# print(pt1.iat[0,0])
# print(pt2.iat[0,0])

制作酷炫数据动图

在这里插入图片描述
在这里插入图片描述
这种图怎么生成呢
首先需要先安装一个库imageio
其实他就是制作了很多张不同时间的图片,按照一定时间的间隔播放做出来的gif

需要把生成的图片放进列表frames中
因此这里这个库
可以将该列表播放
imageio.mimsave(‘data_gif.gif’, frames, ‘GIF’, duration=round(duration, 2))

简单版本:

import xlrd
import datetime
import matplotlib.pyplot as plt
import imageio


def data_gif(cols, xlim_num, duration):#cols 展示前几列的数据,xlim_num x轴刻度值,duration 两张图片间的间隔,建议写0.2-0.5
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    frames = []
    xlsx = xlrd.open_workbook('C:/Users/Administrator/Desktop/excelcode/excel-useful/gifpicture/data_source.xlsx')
    sheet = xlsx.sheet_by_index(0)
    name_list = []
    for j in range(1, int(cols)):#获取第一排的名称
        name_list.append(sheet.cell_value(0, j))

    for i in range(1, sheet.nrows):
        row_data_list = []
        for j in range(1, int(cols)):
            title = sheet.cell_value(i, 0)#每一行的第一个
            row_data = sheet.cell_value(i, j)
            row_data_list.append(float(row_data))
        plt.xlim((0, int(xlim_num)))
        plt.barh(name_list, row_data_list, color='blue')
        plt.savefig("%s.png" % str(title))
        plt.close('all')

        im = imageio.imread("%s.png" % str(title))
        frames.append(im)
    imageio.mimsave('data_gif.gif', frames, 'GIF', duration=round(duration, 2))

data_gif(7,1000,0.5)

此方法做出来,柱状图上没有数字
其中一张图片如下
在这里插入图片描述

进阶版本:
在这里插入图片描述
代码相对比较复杂

import xlrd
import matplotlib.pyplot as plt
import imageio
import numpy as np


def data_gif(cols, xlim_num, xlim_interval, duration,
             title_attach=''):  # cols 展示前几列的数据,xlim_num x轴刻度值,duration 两张图片间的间隔,建议写0.2-0.5,title_attach 标题后附加部分,可不写

    frames = []
    xlsx = xlrd.open_workbook('C:/Users/Administrator/Desktop/excelcode/excel-useful/gifpicture/data_source.xlsx')
    sheet = xlsx.sheet_by_index(0)
    name_list = []
    for j in range(1, int(cols)):
        name_list.append(sheet.cell_value(0, j))

    for i in range(1, sheet.nrows):
        row_data_list = []
        for j in range(1, int(cols)):
            title = sheet.cell_value(i, 0)
            row_data = sheet.cell_value(i, j)
            row_data_list.append(float(row_data))
        font = {'family': 'SimHei',
                'style': 'normal',
                'weight': 'normal',
                'color': '#FFFFFF',
                'size': 20,

                }
        plt.rcParams['figure.figsize'] = (16.0, 9.0)

        plt.rcParams['axes.facecolor'] = '#0D0434'
        plt.rcParams['savefig.facecolor'] = '#0D0434'
        plt.rcParams['xtick.color'] = '#FFFFFF'
        plt.rcParams['ytick.color'] = '#FFFFFF'
        plt.rcParams['axes.edgecolor'] = '#FFFFFF'
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
        plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
        plt.tick_params(labelsize=20)
        plt.xlim((0, int(xlim_num)))
        plt.xticks(range(0, xlim_num, xlim_interval))
        # fig = plt.figure()
        # ax = fig.add_subplot(111)
        # ax.xaxis.label.set_color('red')
        # ax.tick_params(axis='x', colors='red')
        # ax.yaxis.label.set_color('red')
        # ax.tick_params(axis='y', colors='red')

        m = 0

        for n in row_data_list:
            plt.text(int(xlim_num) / 10, m, str(n), ha='left', va='center', fontdict=font)
            m += 1
        plt.barh(name_list, row_data_list, height=0.35, facecolor='#2C43C2', edgecolor='white')
        plt.title(str(title) + str(title_attach), fontdict=font)
        plt.savefig('%s.png' % str(title))
        plt.close('all')

        im = imageio.imread('%s.png' % str(title))
        frames.append(im)
    imageio.mimsave('data_gif.gif', frames, 'GIF', duration=round(duration, 2))


data_gif(7, 800, 200, 0.5, '价格指数')

其中颜色代码

在这里插入图片描述
在这里插入图片描述

matplotlib库的pyplot模块中的xlim()函数用于获取或设置当前轴的x-limits
详情阅读这篇博文

plt.rcParams的一系列设置
在这里插入图片描述
plt.xlim() 和 plt.xticks()

plt.xlim() 显示的是x轴的作图范围,同时plt.ylim() 显示的是y轴的作图范围,而 plt.xticks() 表达的是x轴的刻度内容的范围
plt.xticks(range(0, xlim_num, xlim_interval))# 以xlim_interval为间隔,x轴从0到xlim_num均分

其中柱体上的文字说明是用 plt.text()函数来设置的

 m = 0

 for n in row_data_list:
     plt.text(int(xlim_num) / 10, m, str(n), ha='left', va='center', fontdict=font)
     m += 1

在这里插入图片描述
详细用法参考这篇博文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laney_Midory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值