Pandas 数据特征分析
在前面章节学习了Pandas 两种数据结构Series、DataFrame,及Pandas如何读取Excel数据格式文件,数据预览、数据清洗及数据提取,接下来了解这些数据征分析。在实际工作中,财务、金融、制造业等数据,需从不同维度的指标进行分析,如合计数、最大数、最小数、平均数等,了解数据的差异,那使用Pandas如何分析?
Pandas 常见重要的描述性统计函数如下表:
提示axis=1 按行计算 axis=0 按列计算,默认是按列
Pandas 常见统计指标函数
使用门店销售数据.xlsx文件,计算几个常见的统计指标。
import pandas as pd
df=pd.read_excel("门店销售数据.xlsx")
# #计算销售数量列的总和
print("销售数量总和:",df["销售数量"].sum())
#计算零售价格列平均价格,保留2位小数
print("零售价格列平均价格:",df["零售价格"].mean().round(2))
#计算零售价格列中位数,保留2位小数
print("零售价格列中位数:",df["零售价格"].median().round(2))
#计算销售数量列的最大值
print("销售数量列的最大值:",df["销售数量"].max())
#计算销售数量列的最小值
print("销售数量列的最小值:",df["销售数量"].min())
输出效果如下:
Pandas describe函数
Pandas中的describe()函数是一个用于统计描述性统计信息的方法。于pandas的Series(一维数据)和DataFrame(二维数据)对象上。describe()函数将返回一系列统计指标,包括计数、均值、标准差、最小值、25%分位数、中位数(50%分位数)、75%分位数和最大值。
默认只对数值类型的列进行统计描述,如需统计所有,加上include=‘all’ 参数
门店销售数据.xlsx文件
import pandas as pd
df=pd.read_excel("门店销售数据.xlsx")
print(df.describe())
输出效果如下图:
Pandas sort_values函数
上节使用了统计相关的指标函数,如最大值,最小值,总和等,有时候需像Excel 一样进行排序,以便更好的数据展示。
Pandas 提供了sort_values() 排序函数,可以按照某行或某列的值进行降序或升序排序。
sort_values语法结构:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
语法解析:
by:指定按照哪一列或多列进行排序,可以是列名的字符串或包含列名的列表
axis:指定轴向,0 表示按行排序,1 表示按列排序
ascending:指定排序的顺序,默认为 True 升序排序,设置为 False 则降序排序
inplace:是否在原地修改排序结果,如果设置为 True,则不创建新的 DataFrame 或 Series,直接在原对象上进行排序,默认为 False
kind:指定排序算法类型,可选值有 'quicksort'、'mergesort'、'heapsort',默认为 'quicksort'
na_position:指定缺失值的位置排序,默认为 'last',将缺失值排在最后;设置为 'first',则将缺失值排在最前面。
代码示例:
import pandas as pd
df=pd.read_excel("门店销售数据.xlsx")
df.sort_values(by="销售数量",ascending=False,inplace=True)
print(df)
输出效果图如下:
多列排序,使用列表方式如:by=["销售数量","零售价格"]
Pandas 如何对字符串列进行排序
需求:以年度、月份两列对销售明细表数据进行升序排序。
案例分析:月份的值是Jan Mar 等字符串,如果对字符串排序,Python是基于Unicode编码的字符顺序,即按首个字母对应的ASCII码进行排序,如“ apple ”, “ cherry ”, “ banana”排序为“ apple ”,“ banana”, “ cherry ”。 所以需要月份转换为数字,再进行排序。可以创建字典,将月份做为key,数字做为值,再通过pandas 的map函数进行替换。
代码示例如下:
import pandas as pd
df=pd.read_excel("门店销售数据.xlsx")
monthDict={"Jan":"01","Feb":"02","Mar":"03","Apr":"04","May":"05",
"Jun":"06"}
df=df.drop("月",axis=1,errors="ignore")
df.insert(2,"月",value=df["月份"].map(lambda x:monthDict[x]))
df=df.sort_values(by=["年度","月"],ascending=True).reset_index(drop=True)
print(df)
效果图如下:
案例回顾
案例回顾,知识点积小成多。
①drop 方法:删除DataFrame或Series中的行或列
df.drop(index, axis=0) #删除行
df.drop(columnName, axis=1) #删除列
想要在原地删除(就地修改)原始DataFrame,加上inplace=True参数
②insert方法:向DataFrame中插入新的列
loc:插入新列的位置(索引),可以是一个整数或字符串。
column:指定新列的名称。
value:指定新列的值
想要在原地插入新列(不返回新的DataFrame),加上inplace=True参数
③map方法:用于将一个函数应用于Series中的每个元素
# 创建一个示例Series
s = pd.Series([1, 2, 3, 4, 5])
# 定义一个字典,将Series中的元素映射为对应的值
mapping = {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E’}
s2= s.map(mapping)
print(s2)
Pandas 累计函数
在pandas中,可以使用累计函数对数据进行累计操作。累计函数包括cumsum()、cumprod()、cummax()和cummin(),分别用于计算累计求和、累计乘积、累计最大值和累计最小值。
需求:计算门店B1001 在2022年度,的销售数量和销售金额的累计和。
代码示例如下:
monthDict={"Jan":"01","Feb":"02","Mar":"03","Apr":"04","May":"05","Jun":"06"}
df=df.drop("月",axis=1,errors="ignore")
df.insert(2,"月",value=df["月份"].map(lambda x:monthDict[x]))
df=df.sort_values(by=["年度","月"],ascending=True).reset_index(drop=True)
df=df.loc[df["门店编号"]=="B1001",["年度","月份","月","销售数量","销售金额"]].set_index(["年度","月份","月"]).cumsum()
print(df)
效果图如下:
set_index函数用于将DataFrame的一个或多个列设置为行索引