一:使用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)