1.pandas描述性统计方法
pandas提供了更加便利的方法来计算均值 ,如 detail[‘amounts’].mean()
pandas还提供了一个方法叫作 describe,能够一次性得出数据框所有数值型特征的非空值数目、均值、
四分位数、标准差。detail[[‘counts’,’amounts’]].describe()
方法名称 | 说明 | 方法名称 | 说明 |
min | 最小值 | max | 最大值 |
mean | 均值 | ptp | 极差 |
median | 中位数 | std | 标准差 |
var | 方差 | cov | 协方差 |
sem | 标准误差 | mode | 众数 |
skem | 样本偏度 | kurt | 样本蜂度 |
quantile | 四分位数 | count | 非空值数目 |
describe | 描述统计 | mad | 平均绝对离差 |
import pandas as pd
###加载数据
detail = pd.read_excel('./meal_order_detail.xlsx')
print('detail', detail)
### 查看df的属性-----数据类型
print('detail的数据类型', detail.dtypes)
###pandas中的统计分析
## max min var mean std ptp(极差) count(非空数目总数) mode(众数)
# 以amounts为例
print("amounts的最大值", detail['amounts'].max())
print("amounts的最小值", detail['amounts'].min())
print("amounts的方差", detail['amounts'].var())
print("amounts的标准差", detail['amounts'].std())
print("amounts的极差", detail['amounts'].ptp())
print("amounts的非空数目", detail['amounts'].count())
print("amounts的众数", detail['amounts'].mode())
##describe()
##amounts----->int64 数值型
###返回8种结果
# count mean std min 分位数 max
print("amounts的describe统计指标:", detail['amounts'].describe())
describe统计指标输出结果:
2.类别型特征的描述性统计
描述类别型特征的分布状况,可以使用频数统计表。pandas库中实现频数统计的方法为value_counts。
pandas提供了categories类,可以使用astype方法将目标特征的数据类型转换为category类别。
describe方法除了支持传统数值型以外,还能够支持对category类型的数据进行描述性统计,四个统计
量分别为列非空元素的数目,类别的数目,数目最多的类别,数目最多类别的数目。
import pandas as pd
detail = pd.read_excel('./meal_order_detail.xlsx')
print("dishes_name的describe统计指标:",detail['dishes_name'].describe())
###对于数值型数据进行统计众数,众数的次数--->简单的统计分析实现不了
#1.先将数值型转化为类别型,然后用describe()进行统计分析
###df的数据类型可以通过astype进行类型转换
detail['amounts'] = detail['amounts'].astype('category')
print("detail的数据类型",detail.dtypes)
###再进行describet统计分析
print("转化后的统计指标:",detail['amounts'].describe())
转化后的统计指标输出结果为:
3.时间类型
在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准时间类型
pandas继承了NumPy库和datetime库的时间相关模块,提供了6种时间相关的类。
类名称 | 说明 |
Timestamp | 最基础的时间类。表示某个时间点。在绝大多数的场景中的时间数据都是 Timestamp形式的时间 |
Period | 表示单个时间跨度,或者某个时间段,例如某一天,某一小时等。 |
Timedelta | 表示不同单位的时间,例如1天,1.5小时,3分钟,4秒等,而非具体的某个时间段。 |
DatetimeIndex | 一组Timestamp构成的Index,可以用来作为Series或者DataFrame的索引 |
PeriondtimeIndex | 一组Period构成的Index,可以用来作为Series或者DataFrame的索引 |
TimedeltaIndex | 一组Timedelta构成的Index,可以用来作为Series或者DataFrame的索引。 |
####pandas 默认支持的时间点的类型为:Tiemstamp0
# 默认支持的时间序列类型为:DatetimeIndex
###numpy 里面默认支持datetime64[ns] 类型
##pandas 是封装numpy
import pandas as pd
### 加载数据
detail = pd.read_excel('./meal_order_detail.xlsx')
print('detail',detail)
####拿出时间数据---place_order_time
date = detail['place_order_time']
### 将普通时间序列 转化为pands默认支持的时间序列
detail['place_order_time'] = pd.to_datetime(date)
print(detail.dtypes)
detail['place_order_time'] = pd.DataFrame(date)
print(detail.dtypes)
se = pd.Series(['2019-6-19','2019-6-20'])
print(se)
se = pd.to_datetime(['2019-6-19','2019-6-20'])
print('se的时间类型',type(se))
####时间序列的操作
##获取年数据
year = [i.year for i in detail['place_order_time']]
print(year)
##月
month = [i.month for i in detail['place_order_time']]
print(month)
##日
day = [i.day for i in detail['place_order_time']]
print(day)
###hour minute second
##weekday_name----h、获取轴几
weekday = [i.weekday_name for i in detail['place_order_time']]
print(weekday)
###获取季度
quarter = [i.quarter for i in detail['place_order_time']]
print(quarter)
###获取闰年
leap_year = [i.is_leap_year for i in detail['place_order_time']]
print(leap_year)
###时间相加相减
detail['hh'] = detail['place_order_time']+pd.Timedelta(days=1)
print(detail[['place_order_time','hh']])
### 计算2019-06-10 距离现在多长时间
time = pd.to_datetime('2019-06-19')-pd.to_datetime('2019-06-10')
print(time)
###计算机最早时间和最晚时间
print("min:",pd.Timestamp.min)
print("max:",pd.Timestamp.max)