6:sort_values,loc,corr数据筛选,绘图

一:使用sort_values()对某一列,进行从小到大或者从大到小的排序

(1):对一列进行操作

import pandas as pd
df=pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df.sort_values(by="最低价(元)",inplace=True,ascending=False)
"""
by:填写要操作的列

inplace:默认Fales;我们改为True,使他在原表上修改.

ascending:默认为:True按照从小到大的顺序排序(正序);
我们该为False使他为从大到小的顺序排(逆序)
"""
print(df)

 (2):对多列进行操作

import pandas as pd
df=pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx",index_col="菜名")
df=df.head(15)
df.sort_values(by=["最低价(元)","最高价(元)"],ascending=[True,False],inplace=True)
"""

by:填写要操作的列

inplace:默认Fales;我们改为True,使他在原表上修改.

ascending:默认为:True按照从小到大的顺序排序(正序);
我们该为False使他为从大到小的顺序排(逆序)
"""
print(df)

二:使用loc对数据进行筛选

import pandas as pd
def add(x):
    return 0.3<=x<=1  #0.3<=x<=1这中写法是python中特有的,在c中使用&&连接
    #筛选数据使得在0.3到去之间的数据
#df=df.loc(df["最低价(元)"].apply(add))

df=pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(15)
df=df.loc[df["最低价(元)"].apply(add)].loc[df["最高价(元)"].apply(add)]
"""
注意:loc后面为[]不是()
df["最低价(元)"]:取的是表中的一列
apply:上面说了,调用了函数的方法
"""
print(df)

使用lambda表达式,而不是函数

import pandas as pd
df=pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(15)
df=df.loc[df["最低价(元)"].apply(lambda x:0.3<=x<=1)].loc[df["最高价(元)"].apply(lambda x:0.3<=x<=1)]
"""
注意:loc后面为[]不是()
df["最低价(元)"]:取的是表中的一列
apply:上面说了,调用了函数的方法
"""
print(df)

 三:绘图

使用  import matplotlib.pylab as plt 绘图

如果遇到表中的中文无法打印可以在代码中加上

plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

import pandas as pd
import matplotlib.pylab as plt

代码

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(5)
df.sort_values(by=["最高价(元)","最低价(元)"],inplace=True,ascending=True)
"""
by:填写要操作的列
inplace:默认Fales;我们改为True,使他在原表上修改.
ascending:默认为:True按照从小到大的顺序排序(正序);
我们该为False使他为从大到小的顺序排(逆序)
"""
df.plot.bar(x="菜名",y=["最高价(元)","最低价(元)"],color=["red","orange"])
"""
df.plot.bar:方法中给的是列名
分别指定x和y轴;
color:指定坐标轴的颜色
title:指定表的标题
由于柱状统计是随机排列的,我们可以使用先排序筛选在画图;已达到从小到大或者从大到小的目的:(第9行)
"""
plt.title("菜价柱状统计图",fontsize=16,fontweight="bold")  #fontsize:设置表的标题大小 fontweight="bold"使字体加粗
plt.xlabel("菜名",fontweight="bold")   #设置x轴的名称为:菜名
plt.ylabel("价钱",fontweight="bold")   #设置x轴的名称为:价钱"

#使x轴的名字旋转45度,以更加节省空间
ax=plt.gca()   #拿到轴
ax.set_xticklabels(df["菜名"],rotation=45,ha="right")  #df["菜名"]:要旋转的数据
#调整间距
f=plt.gcf()  #拿到整个图
f.subplots_adjust(left=0.8,bottom=0.42) 
"""
left=0.8   :距离左边的距离
bottom=0.42   :距离底部的距离
"""
#使得绘图的图展现出来
plt.show()
#使得表更加紧凑
#plt.tight_layout()


 直接使用plt绘图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(10)
df=df.sort_values(by="最高价(元)",ascending=True)
"""
by:填写要操作的列
inplace:默认Fales;我们改为True,使他在原表上修改.
ascending:默认为:True按照从小到大的顺序排序(正序);
我们该为False使他为从大到小的顺序排(逆序)
"""


plt.bar(df["菜名"],df["最低价(元)"],color="red")   #==>直接给出的是列的数据
plt.xlabel("菜名")
plt.ylabel('最高价(元)')
plt.title("菜价柱状统计图",fontsize=16)  #fontsize:设置表的标题大小
#使得绘图的图展现出来
plt.show()
#使得表更加紧凑
#plt.tight_layout()

四:叠加柱状图

(一)

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(5)
df["新的列"]=df["最低价(元)"]+df["最高价(元)"]+df["平均价(元)"]
df.sort_values(by="新的列",inplace=True,ascending=True)
df.plot.bar(x="菜名",y=["最高价(元)","最低价(元)","平均价(元)"],\
            color=["red","orange","yellow"],stacked="True",title="叠加柱状图")


"""
df.plot.bar:方法中给的是列名
分别指定x和y轴;
color:指定坐标轴的颜色
title:指定表的标题
stacked="True" :使柱状图的y轴变为一个;变为叠加柱状图
由于叠加柱状统计是随机排列的,我们可以使用先排序筛选在画图;已达到从小到大或者从大到小的目的;
我们可以新建立一个新的列,新的列=y轴的列+y轴的列+y轴的列;排列新的列  EG:9和10行代码
"""
plt.show()
plt.tight_layout()
print(df)

 (二):旋转这个表

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(5)
df["新的列"]=df["最低价(元)"]+df["最高价(元)"]+df["平均价(元)"]
df.sort_values(by="新的列",inplace=True)
df.plot.barh(x="菜名",y=["最高价(元)","最低价(元)","平均价(元)"],\
            color=["red","orange","yellow"],stacked="True",title="叠加柱状图")


"""
df.plot.bar:方法中给的是列名
分别指定x和y轴;
color:指定坐标轴的颜色
title:指定表的标题
stacked="True" :使柱状图的y轴变为一个;变为叠加柱状图
由于叠加柱状统计是随机排列的,我们可以使用先排序筛选在画图;已达到从小到大或者从大到小的目的;
我们可以新建立一个新的列,新的列=y轴的列+y轴的列+y轴的列;排列新的列  EG:9和10行代码
"""
plt.show()
plt.tight_layout()
print(df)

 观察可知道:选择只需要给bar后面加上h变为barh即可

五:饼图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx",index_col="菜名",)
"""
饼图默认会以:自动生成的索引作为每个小饼图的名字;我们index_col="菜名":使每个小饼图的名字为:
这个列中的每个数据
"""
df=df.head(10)
df.sort_values(by="最低价(元)",inplace=True)
df["最低价(元)"].plot.pie(counterclock=False,startangle=-270)
"""
counterclock=False:默认使逆时针,我们改为顺时针
startangle=-270:从-270°使开始画

"""
plt.title("菜价饼图分析表",fontsize=8,fontweight="bold")
#plt.ylabel("最低价(元)",fontsize=4,fontweight="bold")  #重写y坐标轴的名字
"""
#fontsize:设置表的字体大小 
fontweight="bold"使字体加粗
"""
plt.show()

 六:折线图

(一):普通折线图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(10)
"""
饼图默认会以:自动生成的索引作为每个小饼图的名字;我们index_col="菜名":使每个小饼图的名字为:
这个列中的每个数据
"""
df.plot(y=['最低价(元)','最高价(元)','平均价(元)' ,'产地'])
plt.xticks(df.index,fontsize=12,fontweight="bold")
plt.ylabel("菜价折线图",fontsize=12,fontweight="bold")
"""
#fontsize:设置表的字体大小 
fontweight="bold"使字体加粗
"""
plt.show()

(二):叠加区域图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")
df=df.head(10)
"""
饼图默认会以:自动生成的索引作为每个小饼图的名字;我们index_col="菜名":使每个小饼图的名字为:
这个列中的每个数据
"""
df.plot.area(y=['最低价(元)','最高价(元)','平均价(元)' ,'产地'])
plt.xticks(df.index,fontsize=12,fontweight="bold")
plt.ylabel("菜价折线图",fontsize=12,fontweight="bold")
"""
#fontsize:设置表的字体大小 
fontweight="bold"使字体加粗
"""
plt.show()

 仔细观察可以发现:叠加区域图只是在普通折线图df.plot.area变了

七:散点图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")

df.plot.scatter(x="菜名",y='最低价(元)',color="red")
plt.show()
print(df.columns)

 八:直方图

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\股票.xlsx",dtype={"monkey":int})
df=df.head(50)
print(df.columns)
df.monkey.plot.hist(bins=10000)
"""
直方图的写法:df.execl的某一列的列名(不能是中文名字,只能是英文).plot.hist()
bins=100  :默认画的图太小,我们给他100个桶使他变大
"""
plt.xticks(range(0,max(df.monkey),10),fontsize=8,rotation=True)  #rotation=True使他旋转
"""
10:为步长
一共走:0到max(df.monkey)这么长

"""
plt.show()

九:密度表

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\股票.xlsx",dtype={"monkey":int})#dtype={"monkey":int}
df=df.head(50)
print(df.columns)
df.monkey.plot.kde()

plt.xticks(range(0,max(df.monkey),50),fontsize=8,)  #rotation=True使他旋转
"""      
10:为步长
一共走:0到max(df.monkey)这么长

"""
plt.show()

 十:corr

corr函数是打印每个列的相关性

import pandas as pd
import matplotlib.pylab as plt
#4,5行代码解决中文无法打印的问题
plt.rcParams['font.sans-serif']=['SimHei']###解决中文乱码
plt.rcParams['axes.unicode_minus']=False

df = pd.read_excel(r"C:\Users\73575\Desktop\北京新发地菜价.xlsx")#dtype={"monkey":int}
d=df.corr() #打印每个列的相关性

print(d)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值