python可视化(不全-可参考)

1.  折线图

1.1  简单折线图

import matplotlib.pyplot as plt

# 最简单的 plt.plot(y)
# plt.plot([5,3,1,2,8,4,1,9])
# plt.show()

 

1.2  带有x轴,y轴的折线图

import matplotlib.pyplot as plt
# 有x轴,有y轴
x = ['a','b','c','d','e','f','g','h']
y = [6,4,2,6,3,1,8,3]
plt.plot(x,y)
# 或 plt.plot(['a','b','c','d'],[1,2,3,4])
plt.show()

案例:表示一个商品的价格变化趋势

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 用来显示中文标签
x = ['春','夏','秋','冬']
y = [320,250,580,450]
plt.plot(x,y)
plt.show()

1.3  两条折线图,表示最低温和最高温

import matplotlib.pyplot as plt

# 两条折线的图
plt.rcParams['font.sans-serif']=['SimHei'] # 用来显示中文标签
# 推荐方法:  plt.plot(x1,y1) plt.plot(x2,y2) x1是第一个曲线的x轴,y1是第一个曲线的y轴
# x1 = ['3月4','3月5','3月6','3月7','3月8','3月9']
# y1 = [9,6,3,2,1,3]
# y2 = [11,9,9,13,12,13]
# plt.plot(x1,y1)
# plt.plot(x1,y2)

# 或    可以单独设置样式
plt.plot(['3月4','3月5','3月6','3月7','3月8','3月9'],[9,6,3,2,1,3],color='m',linestyle="-.",marker="*")
plt.plot(['3月4','3月5','3月6','3月7','3月8','3月9'],[11,9,9,13,12,13],color='y',linestyle="--",marker="P")


plt.show()

另一种方法:

import matplotlib.pyplot as plt
# 格式 [[],[],[]]  ----二维数组的初始画法---会出现意外的结果
data = [[2,1,4,5,3,6],[5,4,7,1,6,8],[6,2,3,4,1,2]]
# 2  1  4  5  3  6
# 5  4  7  1  6  8
# 6  2  3  4  1  2
# 是按照二维数据的列画的
plt.plot(data)
plt.show()

使用转置(T)的方法解决

import matplotlib.pyplot as plt
import numpy as np

data = np.array([[2,1,4,5,3,6],[5,4,7,1,6,8],[6,2,3,4,1,2]])
plt.plot(data.T)
plt.show()


2.  柱形图

bar(x,height,width,bottom,tick_label)

        x:横轴的坐标   (必须有的,不能省略)

        height:柱子的高度相当于y轴   (必须有的,不能省略)

后面的参数,都是可写可不写的。参数的名字必须写:

width:柱子的宽度,默认值为0.8

bottom:柱子的底

tick_label:柱子横轴的名字

2.1  普通柱形图

import matplotlib.pylab as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
data = [350,280,580,460]
plt.bar(np.arange(1,5),data,tick_label=['春','夏','秋','冬'])
plt.show()

注意:x轴不可省略

        有时候,用range替代x轴的文字,用tick_label添加文字

2.2  簇状柱形图

import matplotlib.pylab as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
data = [350,280,580,460]
data2 = [290,420,390,350]
plt.bar(np.arange(1,5)-0.4,data,tick_label=['春','夏','秋','冬'],width=0.4)
plt.bar(np.arange(1,5),data2,tick_label=['春','夏','秋','冬'],width=0.4)
plt.show()

案例

从xlsx导入数据画图

 xlsx数据

import matplotlib.pylab as plt
import numpy as np
import pandas as pd


df = pd.read_excel('2-2.xlsx')
x = df['财年']
data1 = df['GMV1']
data2 = df['GMV2']
plt.bar(np.arange(len(df)),data1,tick_label=x,width=0.4)
plt.bar(np.arange(len(df))-0.4,data2,tick_label=x,width=0.4)
plt.show()

2.3  堆积柱形图

从xlsx导入数据

import matplotlib.pylab as plt
import numpy as np
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('2-2.xlsx')
x = df['财年']
data1 = df['GMV1']
data2 = df['GMV2']
plt.bar(x,data1)  # 第一个柱子
plt.bar(x,data2,bottom=data1)  # 第二个柱子,放在第一个柱子上,bottom的值等于data1
plt.show()

案例

A B两个产品

A产品是羽绒服:春 320  夏 250 秋 580 冬 450

B产品是电风扇:春 280  夏  400 秋  380 冬 320

画堆积柱形图

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
x = ['春','夏','秋','冬']
data1 = [320,250,580,450]
data2 = [280,400,380,320]
plt.bar(x,data1)  # 第一个柱子
plt.bar(x,data2,bottom=data1)  # 第二个柱子,放在第一个柱子上,bottom的值等于data1
plt.show()


  

3.  条形图

横向的柱形图:​

h -----水平的(horizontal)

v -----垂直的(vertical)

barh(y,windth,height,left,tick_label)

y,width是必须要写的参数

y:是条形图的纵轴,可以是数字序列也可以是分类(春夏秋冬)

        相当于柱形图的x轴

width:是条形图中,条的长度(相当于柱形图的y轴),是一个数值

其他是非必写参数,定义的时候一定要加参数名

height:每个条有多宽(相当于柱形图的width),默认0.8

left:每个条的起点(相当于柱形图的bottom),用于堆积柱形图

tick_label:定义y轴的标签的

3.1 普通条形图

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

x = ['春','夏','秋','冬']
y = [50,130,50,150]
plt.barh(x,y)
plt.show()

案例

import matplotlib.pylab as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_excel('2-3.xls')
label = df['商品种类']
data = df['替代率']
plt.barh(label,data,height=0.6)
plt.show()

3.2 簇状条形图

import matplotlib.pylab as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']

label = ['购物','人情往来','餐饮美食','通信物流','生活用品','交通出行','休闲娱乐']
data1 = [2202,2234,1924,2157,1985,3014,2310]
data2 = [957,1234,1201,784,2147,1423,982]

#簇状条形图
plt.barh(np.arange(1,8),data1,tick_label=label,height=0.4)
plt.barh(np.arange(1,8)-0.4,data2,tick_label=label,height=0.4)

plt.show()

条的宽度height 变成 1/2   y的坐标轴需要定义成numpy序列

两组数据,y值通过+-,让两组条错开显示,实现簇状条形图

3.3 堆积条形图

import matplotlib.pylab as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']

label = ['购物','人情往来','餐饮美食','通信物流','生活用品','交通出行','休闲娱乐']
data1 = [2202,2234,1924,2157,1985,3014,2310]
data2 = [957,1234,1201,784,2147,1423,982]

#堆积条形图
plt.barh(label,data1)
plt.barh(label,data2,left=data1)
plt.show()


4. 堆积面积图

 stackplot(x,y)   适用于直观地感受每一组数据的面积的对比

只写一个数据是没有意义的

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

label = ['购物','人情往来','餐饮美食','通信物流','生活用品','交通出行','休闲娱乐']
data1 = [2202,2234,1924,2157,1985,3014,2310]
data2 = [957,1234,1201,784,2147,1423,982]

plt.stackplot(label,data1)
plt.show()

案例

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

label = ['购物','人情往来','餐饮美食','通信物流','生活用品','交通出行','休闲娱乐']
data1 = [2202,2234,1924,2157,1985,3014,2310]
data2 = [957,1234,1201,784,2147,1423,982]

plt.stackplot(label,data1,data2)
plt.show()

案例

数据格式

import matplotlib.pylab as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('2-4 .xls')
label = df['月份']
data1 = df['A公司']
data2 = df['B公司']
data3 = df['C公司']

plt.stackplot(label,data1,data2,data3)
plt.show()

5. 直方图

直观的观测一组数据的分布:优(90-100)有几个

柱形图,柱子是有缝隙的

直方图的x轴是连续的数据

hist(x,bins)

x:一组数据(数据量要大,仅有数据本身,图会为这个数据分组和计算)

bins:直方图的柱子的个数,默认是10 个

        也可以自己画区域 bins=[50,60,70,80,90,100]

import matplotlib.pylab as plt

data = [90,59,89,84,67,86,76,97,87,53,63,63,72,60,52,52,76,73,99,90,79,71,80,70,97,95,87,93,51,58,65,75,65,68,66,92,80,51,93,69,
85,99,97,86,55,82,100,86,83,62,90,91,71,79,58,55,51,81,71,63,73,93,74,73,56,77,69,94,77,82,89,81,53,78,54,55,62,82,86,74,
93,96,55,56,68,90,92,76,77,60,71,51,68,68,84,71,77,100,73,80,73,71,69,98,89,88,84,97,83,78,97,64,53,88,65,55,81,82,70,52,
77,75,71,82,97,72,95,91,75,91,77,53,83,95,55,89,53,95,92,74,97,64,77,58,74,57,92,74,54,66,59,90,51,67,58,64,52,69,62,54,
100,85,91,96,95,56,53,77,76,74,98,70,75,71,98,79,93,59,84,76,98,73,96,61,79,78,97,91,78,84,86,63,66,63,93,53,69,52,53,80,
86,79,80,96,76,85,66,65,56,89,88,71,52,99,71,78,58,76,81,86,84,97,53,93,92,88,84,67,92,78,71,60,98,73,79,96,79,64,74,96,
93,89,88,63,72,78,57,60,54,84,98,93,54,95,70,99,56,80,80,98,51,71,70,96,88,80,83,88,77,85,75,69,74,76,96,86,62,73,57,87,
56,65,90,59,64,70,81,76,74,80,81,88,62,94,96,58,54,83,86,91,92,51,89,64,83,52,76,79,74,58,95,76,55,91,57,60,65,91,60,71,
58,55,92,71,54,83,79,83,93,59,53,67,63,61,53,88,72,91,61,99,79,69,61,58,69,70,58,52,78,92,69,77,76,86,52,81,97,90,51,79,
66,87,84,73,72,70,95,55,56,60,59,72,60,87,89,95,58,79,92,68,77,53,90,88,83,55,73,53,96,83,57,68,97,56,97,69,74,57,51,52]

plt.hist(data,bins=[50,60,70,80,90,100])
plt.show()

5.1 正态直方图

import matplotlib.pylab as plt
import numpy as np
state = np.random.RandomState(2024)

data = state.randn(20000)  #生成的是平均值为0,标准差为1的标准正态分布数据
plt.hist(data)
plt.show()

6. 饼图

pie(x,labels)

x:需要画成饼图的数据组    必须写的

x的数据不能是百分比

labels:是文字描述

autopct:pct是percent百分比的缩写

        表示百分比格式是 pct='%数值的格式%'

        数值的格式:  %s是字符串的输入输出格式

                                %d是整数的输入输出格式

                                %f是小数的输入输出格式 %.1f 小数点后1 位

pctdistance:百分比所书写的位置,默认0.6

radius:饼图的半径,默认是1

explode:扇形离开圆心的距离,每一个扇形都需要描述缝隙

explode = [0.1,0.1,0.2,0.1,0.1,0.1,0.1,]

shadow:阴影,默认为False

wedgeprops:画环形图需要用的参数,值是一个字典类

        wedgeprops={'width':0.7}

  wedgeprops={'width':0.5,'edgecolor':'w'}

6.1 普通饼图

import matplotlib.pylab as plt

x = [800,100,1000,200,300,200,200,200]
plt.pie(x)
plt.show()

添加标记

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
lbs = ['购物','人情外来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
x = [800,100,1000,200,300,200,200,200]
plt.pie(x,labels=lbs)
plt.show()

给标记添加百分比

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
lbs = ['购物','人情外来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
x = [800,100,1000,200,300,200,200,200]
plt.pie(x,labels=lbs,autopct='%.1f%%',pctdistance=0.8,radius=1.2,explode=[0.05]*8)
plt.show()

6.2 环形饼图

基础环形

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
labs = ['医疗保健','文化娱乐','交通信号','生活服务','居住','衣着','食品烟酒','其他']
data = [1843,2032,2762,1260,5215,1238,6397,462]
plt.pie(data,labels=labs,
        autopct="%.1f%%",
        wedgeprops={'width':0.5})
plt.show()

加了部分参数

import matplotlib.pylab as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
labs = ['购物','人情往来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
data = [800,100,1000,200,300,200,200,200]
exp = [0.06]*8
exp[7]=0.15
plt.pie(data,labels=labs,autopct="%.1f%%",
        pctdistance=0.8,radius=1.4,explode=exp,
        shadow=True,wedgeprops={'width':0.5,'edgecolor':'r','linewidth':1.5})
plt.show()

案例

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('23年12月月票.xls',index_col=0)

data = df.groupby('类型')['书名'].count()
plt.pie(data.values,labels=data.index,
        autopct='%.f%%',
        pctdistance=0.8,
        wedgeprops={'width':0.6,'edgecolor':'w'},
        radius=1.5
        )
plt.show()

6.3 圈圈套圈圈

6.4  案例1

将excel数据导入

index_col可以将excel的第0列,指定为df的index列

import pandas as pd

df = pd.read_excel('23年12月月票.xls',index_col=0)
print(df)

7. 散点图

查看数据的聚集,预测趋向的图。

特点:数据量较大,分布没有固定的规律。能够从聚集中看到趋向。

案例

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('23年12月月票.xls',index_col=0)
plt.figure(figsize=(10,4))

plt.scatter(df['类型'],df['月票'])
plt.show()

x轴最好是连续数值,便于通过x轴的变化,查看y轴的变化

s 是 散点的面积

marker 是散点的图形

alpha 是透明度

随机数案例

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10,4))
x = np.random.rand(100)
y = np.random.rand(100)
al = np.random.rand(100)
ss = np.random.rand(100)*50
plt.scatter(x,y,marker="*",s=ss,alpha=al)
plt.show()

总消费  小费案例

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_excel('tips.xlsx')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10,4))
plt.scatter(df['总消费'],df['小费'])
plt.show()

8. 箱图

 

描述的是:大量的数据分布的情况。最大,最小,中间,聚集倾向等等。

适合科学研究和比对问题。

boxplot(x,vert)

x 是数据

vert 是方向 :默认是      。vert=Flase  水平放箱子

总消费

小费

案例

数据格式

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('2-7.xls')
data1 = df[df['年份']=='2018年']['发电量']
data2 = df[df['年份']=='2019年']['发电量']
# print(data1,data2)
plt.boxplot([data1,data2],labels=('2018年','2019年'),
            meanline=True,widths=0.5,vert=False,patch_artist=True)
plt.show()


9. 雷达图

polar(angles,data)  雷达图并不是输入数据,会自动画图的

雷达图的所有的角,都需要用户自己定位   每一个点都是极坐标定位的

angles:每一个点所在的角度(记录的是弧度)

        如果是4个点  数据为[角1,角2,角3,角4]

        如果是6个点  数据为[角1,角2,角3,角4,角5,角6]

                                         [0°,60°,120°,180°,240°,300°]

                                         [0,π/3,2π/3,4π/3,5π/3]

data:数值所在的列表[3,6,4,8,6,2]

原数据

[0,np.pi/3,2*np.pi/3,np.pi,4*np.pi/3,5*np.pi/3]

[3,6,4,8,6,2]

六个角需要定义七个角度和数据

import matplotlib.pyplot as plt
import numpy as np

angles = [0,np.pi/3,2*np.pi/3,np.pi,4*np.pi/3,5*np.pi/3,2*np.pi]
datas = [3,6,4,8,6,2,3]
plt.polar(angles,datas)
plt.show()

解决方法

为图表画网

        plt.thetagrids(angles*180/np.pi,labels)

案例1

数据格式

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel('雷达图.xlsx')
angles = np.linspace(0,2*np.pi,11)
data1 = data['产品1']
data2 = data['产品2']
data3 = data['产品3']

plt.polar(angles,np.concatenate((data1,[data1[0]])))
plt.thetagrids(angles*180/np.pi,np.concatenate((data['标签'],[data['标签'][0]])))  #加网格
plt.fill(angles,np.concatenate((data1,[data1[0]])),alpha=0.3)  #上色

plt.polar(angles,np.concatenate((data2,[data2[0]])))
plt.fill(angles,np.concatenate((data2,[data2[0]])),alpha=0.3)

plt.polar(angles,np.concatenate((data3,[data3[0]])))
plt.fill(angles,np.concatenate((data3,[data3[0]])),alpha=0.3)
plt.show()

案例2

数据格式

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('2-8.xls',index_col=0) # 导入表
data = df.T
labs = data.index # 一维数据的连接,获取labels

data1 = np.concatenate((data,[data.loc['研究型']])) # 二位数据的连接
plt.polar(np.linspace(0,2*np.pi,7),data1) # 画雷达
plt.fill(np.linspace(0,2*np.pi,7),data1,alpha=0.2) # 涂颜色
plt.thetagrids(np.linspace(0,360,7),np.concatenate((labs,[labs[0]]))) # 画网格
plt.show()

练习题

一、

数据格式

1.1 簇状柱形图

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('第2章.xlsx',sheet_name='4-1')
x = df['学科']
y1 = df['平均成绩(男)']
y2 = df['平均成绩(女)']
plt.bar(np.arange(1,7)-0.4,y1,tick_label=x,width=0.4)
plt.bar(np.arange(1,7),y2,tick_label=x,width=0.4)
plt.show()

1.2 堆积柱形图

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('第2章.xlsx',sheet_name='4-1')
x = df['学科']
y1 = df['平均成绩(男)']
y2 = df['平均成绩(女)']
plt.bar(x,y1)
plt.bar(x,y2,bottom=y1)
plt.show()

二、

数据格式

2.1 饼图

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('第2章.xlsx',sheet_name='4-2')

lbs = df['子类目']
data = df['销售额']
plt.pie(data,labels=lbs,autopct='%.1f%%',pctdistance=0.8)
plt.show()

2.2 折线图

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('第2章.xlsx',sheet_name='4-2')

x = df['子类目']
y = df['销售额']
plt.plot(x,y)
plt.show()


                                         附录A.  Numpy

A.1   数组基础

A1.1  数组的定义

import numpy as np  #载入的库

创建一个一维数组:

np.array([4,2,5,7,8,6,3]) ----基础的一维数组的定义

np.arange(8)  ---- 基础的序列的定义 [0,1,2,3,4,5,6,7]

np.arange(3,40,7)   ---从3到40,步长值为7

创建一个二维数组:

np.array([[2,1,4,5,3,6],[5,4,7,1,6,8],[6,2,3,4,1,2]])

创建随机数组:

Excel中创建随机数:rand() 生成0~1之间的随机数

        excel的rand随机数,每个数的几率都是一样的

相当于几率相同的随机数:np.random.randint()函数

          np.random.randint(8)得到的是一个8以内的整数

          np.random.randint(0,100,10)得到的是一个10个1~100之间的随机数

创建正态分布的随机数

state = np.random.RandomState(2024)

state.randn(number)

A1.2  数组的属性

1、len()只计算了第一个维度的长度
x = np.array([3,10,17,24,31,38])
y = np.array([[2,1,4,5,3,6],[5,4,7,1,6,8],[6,2,3,4,1,2]])
print(len(x),len(y))   ---输出结果 6   3

2.size属性,计算的数组中的元素数量

print(x.size,y.size)  ---输出结果 6   18

3.shape属性,得到的是数组的维度

print(x.shape,y.shape)   ---输出结果  (6,) (3,6)

4.T属性,转置

转置前,转置后

A.2   运算基础

np.abs(-3) -------求绝对值

np.mod(9,2) ------求 9 模 2 余数为 1

np.power(4,2) ----- 求4 的2次方

np.sqrt(16)  ----- 求根号16  结果为小数4.0

np.sin(弧度) ---- 求sin值         ------括号中是弧度,不是角度

弧度角度
00
π/290
π180
3π/2270
360
5π/2450

π   -----> np.pi  ------>  3.1415926355897932846

np.linspace(start,end,number)    从start到end,取number个节点(默认包含头尾点)

绘制正弦

import numpy as np
import matplotlib.pylab as plt
x = np.linspace(0,2*np.pi,100)
plt.plot(x,np.sin(x))
plt.show()


附录B.  Pandas

B.1 series(一维数据)

1、导入的文件的分类

直接存储文字内容,根据编码形式:utf8  gbk 

utf8:更支持西文,西文字符 1个字节,中文字符 3 个字节

gbk:所有字符都是 2 字节

比如:txt   html    py    sh   json    xml   java   c   bat    csv   ......

2、字节型文件

需要存储的内容不单单是文字,有更多的东西

比如:音乐、图片、文档(doc、excel、mdb)

需要指定的软件才能操作

B.1.1  数组的定义

B.1.2  数组的属性

B.2 dataframe(二维数据)

B.2.1 DF的概念和属性

df的导入分类:字符型:json(接近字典)     csv(excel)        txt(都行)

                                        json.load(f)        pd,red)csv()

                        字节型:        excel                 数据库

                                           read_excel()                

常见的问题错误1:字符型读入的时候,容易出现编码错误

                                设置encoding的值

常见的问题错误2:

B.2.2 数据的输入和输出

数据库sqlpandas的dataframe
基本筛选select * from books where type='都市';df['类型']=='都市'
简单排序order by
聚类+筛选sum() avg() max() min() count()
分组+计算select 分组字段,聚类计算 from 表名 group by 分组字段

从表格读取数据

import pandas as pd

df = pd.read_excel('23年12月月票.xls',index_col=0)
print(df)

单独输出一列数据

月票大于10000的

计数

import pandas as pd

df = pd.read_excel('23年12月月票.xls',index_col=0)
print(df[df['月票']>10000]['书名'].count())
# 或 
# print(df[df['月票']>10000].count()['书名'])

分组+计算

df的groupby方法  :  df.groupby('分组字段')  

        用聚类函数对每个子表进行聚类运算,结果合并一个结果

        df.groupby('分组字段').count()

        df.groupby('分组字段').sum()   ----结果计算一个df数据

案例:

计算月票的平均数

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('23年12月月票.xls',index_col=0)

data = df.groupby('类型')['月票'].mean()
plt.figure(figsize=(10,4))
plt.bar(data.index,data.values)
plt.show()

表的连接

横着连:

        学生信息表 + 选课信息表

        表A和表B 有1或多个字段,是相互对应的

        学生信息表(学号pk,姓名,性别,电话,班级,总学分)

        选课信息表(学号pk,课程号pk,课程名称,任课教师,电话,学分)

pd.merge()   横着连接的方法

竖着连:

        相同格式的数据

pd.concat()

补充:很多文件如何都读取

表格都放在qd文件夹内了   多表连接

import pandas as pd
import os

dfls=[]
for fname in os.listdir('C:/Users/Administrator/Desktop/qd/'):
    dfls.append(pd.read_excel("C:/Users/Administrator/Desktop/qd"+"/"+fname,index_col=0))
df = pd.concat(dfls)
del df['连载']   #删除不需要的列,可不加
del df['更新时间']  #删除不需要的列,可不加
# df.to_excel('ww.xlsx')   #输出查看效果,可不加
newdf = df.drop_duplicates('书名')  #以书名为依据去重
print(newdf)

excel的读入和写出:

读入:read_excel()

自动为读入的表添加一列index,range(len(df))

read_excel(***.xlsx,index_col=0)  参数将表格的第一列作为idnex列

核心是先看看表格第一列是什么

写入:to_excel()

写入到excel的时候,默认写上index作为第一列

to_excel(***.xlsx,index=Flase)  写入到excel的时候,不写index列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SKY慕雪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值