Python————Pandas统计分析基础

Pandas简介 pandas:强大的数据分析和处理工具 快速、灵活、富有表现力的数据结构:DataFrame数据框和Series系列 Pandas读取文本

Pandas简介

pandas:强大的数据分析和处理工具
快速、灵活、富有表现力的数据结构:DataFrame数据框和Series系列

Pandas读取文本数据

在这里插入图片描述

#读写不同数据源的数据
import pandas as pd
data_txt = pd.read_csv('meal_order_info.txt',sep=' ')    #指定一行中数据间的分隔符为空格
data_csv = pd.read_csv('meal_order_info.csv',encoding='GBK')    #设置解码方式为GBK
data_txt

在这里插入图片描述

data_csv

在这里插入图片描述

储存数据框

在这里插入图片描述

#将数据框储存为文本文件数据
data_csv.to_csv('tmp/data_csv.csv',index=None,encoding ='gbk')  #index为行索引 ,header为列索引  None为取消

Pandas读取excel文件

在这里插入图片描述

#Pandas读取excel文件
data_excel =pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2')
data_excel

在这里插入图片描述

将数据框储存为excel文件

#将数据框储存为excel文件
data_excel.to_excel('tmp/data_excel.xlsx',index=None,sheet_name='test1')

构建数据框

在这里插入图片描述

#series 系列
import pandas as pd
ser1 = pd.Series([1,2,'a'],index=['a','b','c'])
print(ser1)
ser2  = pd.Series({'a':[1,2,3],'b':['1','2','3']})
print(ser2)

在这里插入图片描述

d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
print(d)
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])  #index 设置行名称 columns 设置列名称
print(df)

在这里插入图片描述

在这里插入图片描述

d={'color':['blue','green','yellow','red','white'],'object':['ball','pen','pencil','paper','mug'],'price':[1.2,1.0,0.6,0.9,1.7]}
frame = pd.DataFrame(d,index=['a','b','c','d','e'])
print(frame)pd.DataFrame(index=[1,2],columns=[1,2])                       #生成全部都是缺失值的数据框    

在这里插入图片描述

pd.DataFrame(1,index=[1,2],columns=[1,2])                       #生成全部都是1的数据框 

在这里插入图片描述

查看数据框的常用属性

在这里插入图片描述

#数据框的常用属性
d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)
print(df.values)
print(df.index)
print(df.shape)
print(df.dtypes)                          #查看数据框内每一列数据的类型

在这里插入图片描述

按行列顺序访问数据框中的元素

d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)print(df['A'])                 #单列数据访问
print(df[['A','C']])                #多列数据的访问print(df.head(3))                 #查看数据的前3行
print(df.tail(3))                  #查看数据的后3行print(df.iloc[0,0])                  #查看数据的第0行,第0列
print(df.iloc[0:3,0])
print(df.iloc[:,0])
print(df.iloc[0,:])

在这里插入图片描述

按行列名称访问数据框中的元素

print(df.loc['a','A'])
print(df.loc['a':'c','A'])                  #按名称访问 'a':'c'   是闭区间
print(df.loc[:,'A'])  
print(df.loc['a':'c',:]) 
print(df.loc[['a','c'],['A','C']])

在这里插入图片描述

修改数据框中的数据

在这里插入图片描述

d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)
df.loc['a','A'] = 101       #修改数据框中的数据
df.loc[:,'B']  = 0.25
df.loc[:,'C']=[1,2,3,4]
print(df)

在这里插入图片描述

在这里插入图片描述

d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)
df['E']=5                  #添加额外的列
df['F']=[1,2,3,4]    
print(df)

在这里插入图片描述

删除数据框中的元素

在这里插入图片描述

d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)
print(df.drop('D',axis=1,inplace=False))       #删除单列数据     inplace不添加时默认为False#当inplace=False时,不对源数据进行修改,而是返回一个副本文件 #当inplace=True时,直接对源数据进行修改
print(df.drop(['a','c'],axis=0))           

在这里插入图片描述

描述分析数据框中的元素

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

import numpy as np
d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=['A','B','C','D'])
print(df)
print(np.mean(df,axis=1)   )    #求均值  axis=1 按行   axis=0 按列   默认按列
df.std()
df.describe() df['A'].value_counts()  统计出A列元素的出现次数

在这里插入图片描述

转换成时间类型数据

在这里插入图片描述

import pandas as pd
order = pd.read_csv('tmp/meal_order_info.csv',encoding='gbk')
#print(order)
print(order['lock_time'].dtype)
order['lock_time'] = pd.to_datetime(order['lock_time'])   #将lock_time这一列的数据类型转为时间类型
print(order['lock_time'].dtype)

在这里插入图片描述

order['lock_time']

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

print(pd.DatetimeIndex(order['lock_time']))
print(pd.PeriodIndex(order['lock_time'],freq='H'))

在这里插入图片描述

时间类型数据的常用操作

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

print(order['lock_time'])
print(order['lock_time'][0].year)       #查看第0个元素的年份
print(order['lock_time'].dt.year)        #查看所有元素的年份
print(order['lock_time'].dt.month)       #查看所有元素的月份
print(order['lock_time'].dt.week)        #查看所有元素是每年第几个星期

在这里插入图片描述

print(order['lock_time']+pd.Timedelta(days=1)  )       #将日期全部增加一天
print(order['lock_time'][1]-order['lock_time'][0]   )        #将第1个元素和第0个元素相减 求时间差

在这里插入图片描述

分组聚合操作

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

import pandas as pd
detail = pd.read_excel('tmp/meal_order_detail.xlsx')
detail.head()

在这里插入图片描述

detail_group = detail[['order_id','counts','amounts']].groupby(by='order_id')  #以order_id为分组依据
detail_group.agg('mean').head(3)

在这里插入图片描述

detail_group.agg(['mean','sum']).head(3)

在这里插入图片描述

import numpy as np
detail_group.agg({'counts':['mean',np.max],'amounts':'std'}).head(3)

在这里插入图片描述

创建透视表与交叉表

在这里插入图片描述

import pandas as pd
detail = pd.read_excel('tmp/meal_order_detail.xlsx')
detail.head()

在这里插入图片描述

pd.pivot_table(detail[['order_id','counts','amounts']],index='order_id',aggfunc='sum').head(3)

在这里插入图片描述

pd.pivot_table(detail[['order_id','dishes_name','counts']],index='order_id',columns='dishes_name',aggfunc='sum')

在这里插入图片描述

pd.pivot_table(detail[['order_id','dishes_name','counts']],index='order_id',columns='dishes_name',values='counts',fill_value=0).head()

在这里插入图片描述

pd.crosstab(index=detail['order_id'],columns=detail['dishes_name']).head()

在这里插入图片描述

pd.crosstab(index=detail['order_id'],columns=detail['dishes_name'],values=detail['counts'],aggfunc='sum').fillna(0).head()

在这里插入图片描述