python数据分析4--批量处理数据

1.数据的分组

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
#df.group('X'),按照X进行分组
group = df.groupby('gender')
#group.size()可以返回每组的数量,并返回一个含有分组大小的Series
for gender,value in group.size().items():
    # 计算每组的占比
    accounted = value/df.shape[0]
    # 将小数转化成百分数
    bb = "%.2f%%" % (accounted * 100)
    print('福布斯2018年度亿万富翁中{}共{}位,占比是{}'.format(gender,value, bb))
#代码df['age'].groupby(df['gender'])的逻辑是:取出df中age列数据,并且对该列数据根据df['gender']列数据进行分组操作
group = df['age'].groupby(df['gender'])
# 查看分组,group.groups的结果是一个字典,字典的key是分组后每个组的名字,对应的值是分组后的数据,此方法方便我们产看分组的情况
print(group.groups)
# 根据分组后的名字选择分组
print(group.get_group('F'))

2.对分组进行遍历

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
groups = df.groupby('gender')
#获取分组后名字为F的组,并计算年龄的最小值,最大值,平均值
f_group=groups.get_group('F')
min=f_group['age'].min()
max=f_group['age'].max()
mean=f_group['age'].mean()
print(min,max,mean)
#遍历每个组,group_name为组名,group_df为数据
for group_name,group_df in groups:
    print(group_name,group_df.shape)
    min_age=group_df['age'].min()
    max_age=group_df['age'].max()
    mean_age=group_df['age'].mean()
    print(min_age,max_age,mean_age)

在这里插入图片描述
3.多列分组

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
#列表中列名的顺序不一样,结果不同
group=df.groupby(['country','gender'])
df1 = group.size()
print(df1)
size = df1['Austria']['F']
print(size)

4.对分组后数据进行统计

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
groups = df.groupby('gender')
#自定义函数
def peak_range(df):
    """
        返回数值范围
    """
    return df.max() - df.min()
for group_name,group_df in groups:
#将函数的名字以字符串的形势存储到列表中,自定义函数无需转换为字符串
    f_se = group_df['age'].agg(['max','min','mean',peak_range])
     print('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2]))

4.总结
在这里插入图片描述
5.典例
(1)本次练习采用的是网易考拉海淘网口红一天的销售数据。每条数据都包含了品牌、折扣价、原价、是否自营、评论数、国家共6列信息。文件路径为data/course_data/data_analysis/lipsticks.xlsx,1. 统计每种口红的平均折扣价。 2. 分别统计每种口红自营评论数总和和非自营的评论数总和。

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/lipsticks.xlsx')
print(df.head())

# 1. 统计每种口红的平均折扣价。
# 根据品牌进行分类
groups = df.groupby('品牌')
for group_name,group_df in groups:
    mean = group_df['折扣价'].mean()
    str_mean = '{}的平均折扣价为{}'.format(group_name,mean)
    print(str_mean)

# 2. 分别统计每种口红自营评论数总和和非自营的评论数总和
# 根据品牌列和是否自营列进行分组
groups = df.groupby(['品牌','是否自营'])
for group_name,group_df in groups:
    group_sum = group_df['评论数'].sum()
    str_sum = '{}{}的评论数为{}'.format(group_name[0],group_name[1],group_sum)
    print(str_sum)

(2)本次练习采用的是爱奇艺视频数据。共有6万多条电影数据,每条数据包含12列信息,文件的路径为/data/course_data/data_analysis/aiqiyi.xlsx,以下获取的前五条数据:1. 取出每年电影评分前两名电影的名字 2. 哪一年的电影总评分最高

#第一题答案
import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/aiqiyi.xlsx')
groups = df.groupby('上映时间')
for group_name,group_df in groups:
    result = group_df.sort_values(by='评分',ascending=False)[0:2]
    print(group_name,result['整理后剧名'])
#第二题答案
import pandas as pd
df = pd.read_excel('./data/aiqiyi.xlsx')
groups = df.groupby('上映时间')
year=groups.sum().sort_values(by='评分',ascending=False).index.to_list()[0]
print(year)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值