表格的增删改查
表格对象的数据查询
1.通过序列对象查询数据
- 访问单列:表格名称['序列名称'][索引]
- 访问多列:表格对象 [['列名称1','列名称2',...]] [行索引]
2. loc方法
- 访问单列:表格对象.loc[行索引,'列名称']
- 访问多列:表格对象.loc[行索引,['列名称1','列名称2',...]]
3. iloc方法
- 表格对象.iloc[行索引,列索引]
- 和loc方法的区别主要在列索引,iloc中的列索引表示列的序号,接收的是数字
调用语法:表格对象.iloc[n,m]
n表示行索引,表示访问第n行
m表示列索引,表示访问第m列
表格对象数据的条件查询
- 条件查询就是满足一定条件的数据
- 一般有两种方法实现条件查询:
1.表格对象.query(查询条件字符串)
2.表格对象.loc[条件序列对象+逻辑判断,列索引]
表格对象的索引重置
- 表格对象的默认索引为从0开始的连续数字索引
- 当使用条件查询等对部分行数据进行筛选的方法时,导致新的表格对象的索引不连续
- 索引不连续时,索引不再表示n+1行数据
- 所以要把索引重置为连续的数字索引
- 或以某一列数据作为新的索引
- 格式:表格对象.set_index(列名称)
表格对象数据的新增
- 思路:将一个序列对象赋值给表格对象新的一列
- 语法:表格对象['新的对象']=某个序列对象
- 注意:新的列名不能和表格对象中已有的列名重复
新增:
表格对象数据的删除
- 语法:表格对象.drop(n,axis=0)
参数n表示行或列的索引
axis默认为0,表示删除行,axis=1时删除列
分组统计分析
- 概念:
- 分组分析又叫分组聚合,先分组,后聚合。
- 分组指根据某个类别型变量(如:性别)对一个结构化数据进行分组
- 聚合指计算每个组的某个指标和聚合值,聚合值指求和、最值、均值这类由多个值聚合而来的指标。
- 作用:用来分析不同组的数据之间的差异。
实现分组分析步骤
- 确定聚合变量
- 指定聚合函数
- 聚合函数:max/min/mean/count/sum/......
- 语法:表格对象.groupby('分组变量')['聚合变量'].聚合函数()
#不对国家进行处理,使用count函数时聚合变量是任意的
result1 = df.groupby('国家')['国家'].count().sort_values(ascending=False)
result1
注意:
- 返回结果是一个series序列对象,索引是分组变量,值是聚合结果
- 如果聚合函数是求计数函数count(),则聚合变量可以是任意一个变量,结果都一样
多变量分组聚合
语法:语法:表格对象.groupby(['分组变量1','分组变量2'])['聚合变量'].聚合函数()
# 处理国家数据后分组
df['国家2']=df['国家'].str.split('/').agg(lambda x:x[0])
result2 = df.groupby('国家2')['电影名称'].count().sort_values(ascending=False)
result2
多变量分组---交叉分析
语法:
pd.pivot_table(
data=表格对象,#接收表格对象,即用于交叉分析的结构化数据
values=聚合变量, # 指定需要的聚合变量
index=‘行分组变量’, # 接收string或list,表示行分组变量,即第一个分组用变量
columns=‘列分组变量’,#接收string或list,表示列分组变量,即第二个分组用变量
aggfunc=‘聚合函数’, # 接收函数名称,表示聚合函数,默认是均值函数mean
margins= True , # 接收布尔值,表示是否求汇合总数据,默认是True
)
【任务】统计不同国家的高分电影数量和平均评分。
# agg中计数用len,平均值用np.mean
import numpy as np
df.groupby('国家2')['评分'].agg([len,np.mean]).sort_values(by='mean',ascending=False)
df.groupby('国家2')['评分'].count()
df.groupby('国家2')['评分'].mean().sort_values(ascending=False)
注意:由于Python没有自带平均值mean函数,故需要从numpy库引入np.mean函数用于平均
时间类型数据处理
Timestamp时间对象:
- 通过pd.Timestamp()类来生成
# 通过pd.Timestamp()类来生成
time = pd.Timestamp(2022,3,18,13,39,0)
print('生成的时间是:',time)
print('它的类型是:',type(time))
- 通过pd.to_datetime()函数生成
# 通过pd.to_datetime()函数来生成
time_str = '2022-03-18 13:39:00'
print('时间字符串是:',time_str)
print('它的类型是:',type(time_str))
time2 = pd.to_datetime(time_str)
print('转换后的打印结果是:',time2)
print('它的类型是:',type(time2))
Timestamp时间对象的常用属性
- 时间对象可以通过其属性来查看他的局部时间
- 属性名:year\month\day\hour\minute\second,分别对应年月日,时分秒。
time = pd.Timestamp(2022,3,18,13,39,0)
print('生成的时间是:',time)
print('年:',time.year)
print('月:',time.month)
print('日:',time.day)
print('时:',time.hour)
print('分:',time.minute)
print('秒:',time.second)
Timedelta时间差对象
生成Timedelta时间差对象的两种方法
1. 通过pd.Timedelta()类生成
# 通过pd.Timedelta()类生成
timedelta1 = pd.Timedelta(hours=1)
timedelta2 = pd.Timedelta(days=1)
print('1小时时间差对象:',timedelta1)
print('1天时间差对象:',timedelta2)
2.通过两个Timedelta时间对象相减得到
# 通过两个Timestamp时间对象相减得到
time = pd.Timestamp(2022,3,18,13,39,0)
time2 = pd.Timestamp(2022,3,20,13,39,0)
print('两个时间的差为:',time2-time)
Timedelta时间差对象属性
主要有:days,seconds
# 时间差对象的属性
timedelta = pd.Timedelta(hours=1)
print('1小时时间差对象:',timedelta)
print('天数:',timedelta.days)
print('秒数:',timedelta.seconds)
Timedelta时间差对象之间的运算
时间对象+/- 时间差对象 = 另一个时间对象
时间对象序列及dt对象
- pd.to_datetime函数生成时间对象序列,将时间字符串转换为时间度对象序列。
- dt对象是基于时间对象序列衍生出的一个用于处理序列中的时间的工具
语法:时间对象序列.dt.时间处理方法
dt对象常有的时间处理方法有:
1.返回局部时间信息:year\quarter\month.....
2.返回星期几:weekday(0--6对应 星期一 ~~ 星期天)
3.返回当前日期是当年的第几周:isocalendar()
# 生成季度数据
time_series.dt.quarter
# 生成星期几数据
time_series.dt.weekday
# 生成当年周数和星期几数据
time_series.dt.isocalendar()
小结:
以上就是我对Python统计分析的一些总结,利用这些来对表格对象完成Excel任务,虽然没有Excel完成的简单,但是在处理数据的分析中Python通过计算不同维度的统计使得数据中的信息更清晰。