pandas数据分析

Posted 数据攻城小狮子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas数据分析相关的知识,希望对你有一定的参考价值。

文章目录

DataFrame数据处理与分析

部分数据如下

这个数据百度可以搜到,就是下面这个

读取Excel文件中的数据

import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide',True)
pd.set_option('display.unicode.east_asian_width',True)
#usecols指定要读取的列的索引或名字
df=pd.read_excel(r'C:\\Users\\dell\\Desktop\\超市营业额2.xlsx',usecols=['工号','姓名','时段','交易额'])
print(df[:10],end='\\n\\n')#输出前10行数据

#读取第一个worksheet中所有列
#跳过第1、3、5行,指定下标为1的列中数据为DataFrame的行索引标签
df=pd.read_excel(r'C:\\Users\\dell\\Desktop\\超市营业额2.xlsx',skiprows=[1,3,5],index_col=1)
print(df[:10])

筛选符合特定条件的数据

#读取全部数据,使用默认索引
df=pd.read_excel(r'C:\\Users\\dell\\Desktop\\超市营业额2.xlsx')
#下标在[5,10]区间的行,切片限定的是左闭右开区间
df[5:11]

#iloc使用整数做索引
df.iloc[5]#索引为5的行

df.iloc[[3,5,10]]#下标为[3,5,10]的行

df.iloc[[3,5,10],[0,1,4]]#行下标[3,5,10],列下标[0,1,4]

df[['姓名','时段','交易额']][:5]#指定的列前5行的数据

df[:10][['姓名','日期','柜台']]#只查看前10行指定的列

df.loc[[3,5,10],['姓名','交易额']]#下标为[3,5,10]行的指定列

df.at[3,'姓名']#行下标为3,姓名列的值

'赵六'
#如果有报错,看看柜台列的字符是不是跑到交易额列去了
#因为交易额有几个是空值,直接复制来的数据可能位置不对
print(df[df['交易额']>1700])#交易额高于1700元的数据

df['交易额'].sum()#交易总额

327257.0
#注意这个数据里是中文冒号
df[df['时段']=='14:00-21:00']['交易额'].sum()#下午班的交易总额

151228.0
#张三下午班的交易情况
df[(df.姓名=='张三')&(df.时段=='14:00-21:00')]

#日用品柜台销售总额
df[df['柜台']=='日用品']['交易额'].sum()

88162.0
#张三和李四2人销售总额
df[df['姓名'].isin(['张三','李四'])]['交易额'].sum()

116860.0
#交易额在指定范围内的记录
df[df['交易额'].between(800,850)]

查看数据特征和统计信息

#查看交易额统计信息
df['交易额'].describe()

#交易额四分位数
df['交易额'].quantile([0,0.25,0.5,0.75,1.0])

#交易额中值
df['交易额'].median()

1259.0
#交易额最小的3条记录
df.nsmallest(3,'交易额')

#交易额最大的3条记录
df.nlargest(3,'交易额')

#最后一个日期
df['日期'].max()

Timestamp('2019-03-31 00:00:00')
#最小的工号
df['工号'].min()

1001
#第一个最小交易额的行下标
index=df['交易额'].idxmin()
print(index)
#第一个最小交易额
print(df.loc[index,'交易额'])

76
53.0
#第一个最大交易额的行下标
index=df['交易额'].idxmax()
print(index)
#第一个最大交易额
print(df.loc[index,'交易额'])

105
12100.0

按不同标准对数据排序

#按交易额和工号降序排序
df.sort_values(by=['交易额','工号'],ascending=False)

#按交易额降序、工号升序排序
df.sort_values(by=['交易额','工号'],ascending=[False,True])

#按工号升序排序,na_position指定缺失值放在最前面/后面,first/last
df.sort_values(by='工号',na_position='last')

#按列名升序排序
#汉字的Unicode编码排序
df.sort_values(by='姓名',ascending=True)

使用分组与聚合对员工业绩进行汇总

#index对5求余,然后求和
df.groupby(by=lambda num:num%5)['交易额'].sum()

#根据指定字典的键对index进行分组,值为index标签
df.groupby(by=7:'下标为7的行',35:'下标为35的行')['交易额'].sum()

#不同时段的销售总额
df.groupby(by='时段')['交易额'].sum()

某行数据有问题,但无伤大雅,重要的是方法

#各柜台销售总额
df.groupby(by='柜台')['交易额'].sum()

#查看每个员工上班总时长是否均匀
ddf=df.groupby(by='姓名')['日期'].count()
ddf.name='上班次数'
ddf

#每个员工交易额的平均值
df.groupby(by='姓名')['交易额'].mean().round(2).sort_values()

#汇总交易额转换为整数
df.groupby(by='姓名').sum()['交易额'].apply(int)

#每个员工交易额的中值
df.groupby(by='姓名')['交易额'].median()

# 每个员工交易额中值的排名
dff=df.groupby(by='姓名').median()
dff['排名']=dff['交易额'].rank(ascending=False)
dff[['交易额','排名']]

# 每个员工不同时段的交易额
df.groupby(by=['姓名','时段'])['交易额'].sum()

# 时段和交易额采用不同的聚合方式
df.groupby(by=['姓名'])['时段','交易额'].aggregate('交易额':['sum'],'时段':lambda x:'各时段累计')

# 使用DataFrame结构的agg()方法对指定列进行聚合
df.agg('交易额':['sum','mean','min','max','median'],'日期':['min','max'])

# 对分组结果进行聚合
df.groupby(by='姓名').agg(['max','min','mean','median'])[['工号','交易额']]

以上是关于pandas数据分析的主要内容,如果未能解决你的问题,请参考以下文章

Pandas基础

Python pandas用法

python(pandas模块)?

python--pandas分组聚合

python 数据分析--pandas

python-pandas