数据框按行拼接_利用Python进行数据分析
1.一维数据分析
#导入numpy包
import numpy as np#导入panda包
import pandas as pd
numpy 一维数组 array
#定义:numpy一维数组array
a=np.array([1,2,3,4,5])
1)查询元素
#查询元素
a[0]
输出:
1
2)切片访问
#切片访问
a[1:4]
输出:
array([2, 3, 4])
3)循环访问
for i in a:print (i,'time 3 =',i*3)
输出:
1 time 3 = 3
2 time 3 = 6
3 time 3 = 9
4 time 3 = 12
5 time 3 = 15
4)数据类型
#数据类型
a.dtype
输出:
dtype('int32')
- numpy 一维数组与列表的区别:
1)区别1:numpy 一维数组的统计功能
#一维数组的平均值
a.mean()
输出:
3.0
#一维数组的标准差
a.std()
输出:
1.4142135623730951
2)区别2:numpy 一维数组的向量化计算
#向量相加
a[0:2]+a[3:5]
输出:
array([5, 7])
#乘以标量
a[0:5]*10
输出:
array([10, 20, 30, 40, 50])
pandas 一维数组 series
#定义:pandas一维数组series
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
描述统计:
#获取描述统计信息
S1.describe()
输出:
count 4.000000
mean 2.500000
std 1.290994
min 1.000000
25% 1.750000
50% 2.500000
75% 3.250000
max 4.000000
dtype: float64
iloc 和 loc:
- iloc属性用于根据位置查询值
#iloc属性用于根据位置获取值
S1.iloc[0]
输出:
1
- loc属性用于根据索引获取值
#loc属性用于根据索引获取值
S1.loc['a']
输出:
1
向量相加
#向量化运算:向量相加
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S3=S1+S2
S3
输出 :
a 6.0
b 8.0
c NaN
d NaN
e NaN
f NaN
dtype: float64
以上存在缺失值。有以下解决方法:
方法1:删除缺失值
#删除缺失值
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S4=S1+S2
S4.dropna()
输出:
a 6.0
b 8.0
dtype: float64
方法2:填充缺失值
#填充缺失值
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S5=S1.add(S2,fill_value=0)
S5
输出:
a 6.0
b 8.0
c 3.0
d 4.0
e 7.0
f 8.0
dtype: float64
2.二维数据分析
numpy二维数据结构
#定义:numpy二维数组
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
1)查询元素
#查询第一行,第三列元素
a[0,2]
输出:
3
2)获取第n行
#获取第2行
a[1,:]
输出:
array([5, 6, 7, 8])
3)获取第n列
#获取第3列
a[:,2]
输出:
array([ 3, 7, 11])
numpy数轴参数
1)按行计算
#按行计算:axis=1计算每一行
a.mean(axis=1)
输出:
array([ 2.5, 6.5, 10.5])
1)按列计算
#按列计算:axis=0计算每一列
a.mean(axis=0)
输出:
array([ 5., 6., 7., 8.])
pandas数据框(DataFrame)
#第1步:定义一个字典,映射列明与对应列的值
salesDict={'购药时间':['2008-01-01 星期五','2018-01-02 星期六','2018-01-26 星期三'],'社保卡号':['001616528','001616528','0012602828'],'商品编码':[236701,236701,236701],'商品名称':['强力VC银翘片','清热解毒口服液','感康'],'销售数量':[6,1,2],'应收金额':[82.8,28,16.8],'实收金额':[69,24.64,15]
}
#第2步:定义数据框,参数传入字典
saleDf=pd.DataFrame(salesDict)
saleDf
输出:
1)有序的数据框
#第1步:定义一个字典,映射列明与对应列的值
salesDict={'购药时间':['2008-01-01 星期五','2018-01-02 星期六','2018-01-26 星期三'],'社保卡号':['001616528','001616528','0012602828'],'商品编码':[236701,236701,236701],'商品名称':['强力VC银翘片','清热解毒口服液','感康'],'销售数量':[6,1,2],'应收金额':[82.8,28,16.8],'实收金额':[69,24.64,15]
}
#第2步:导入有序字典
from collections import OrderedDict
#第3步:定义一个有序字典
salesOrderDict=OrderedDict(salesDict)
#第4步:定义数据框:传入字典,列名
salesDf=pd.DataFrame(salesOrderDict)
salesDf
输出:
2)平均值
#按列计算平均值
salesDf.mean()
输出:
商品编码 236701.000000
销售数量 3.000000
应收金额 42.533333
实收金额 36.213333
dtype: float64
- iloc属性用于根据位置查询值
1)查询元素
#查询元素
salesDf.iloc[1,2]
输出:
236701
2)获取第n行
#获取第1行:
salesDf.iloc[0,:]
输出:
购药时间 2008-01-01 星期五
社保卡号 001616528
商品编码 236701
商品名称 强力VC银翘片
销售数量 6
应收金额 82.8
实收金额 69
Name: 0, dtype: object
3)获取第n列
#获取第1列:
saleDf.iloc[:,0]
输出:
0 2008-01-01 星期五
1 2018-01-02 星期六
2 2018-01-26 星期三
Name: 购药时间, dtype: object
- loc属性用于根据索引查询值
1)查询元素
#查询元素
salesDf.loc[0,'商品名称']
输出
'强力VC银翘片'
2)获取某行
#获取第1行:
salesDf.loc[0,:]
输出:
购药时间 2008-01-01 星期五
社保卡号 001616528
商品编码 236701
商品名称 强力VC银翘片
销售数量 6
应收金额 82.8
实收金额 69
Name: 0, dtype: object
3)获取某列
#获取第1列:
salesDf.loc[:,'商品名称']
或者:
#查询 商品名称 列
salesDf['商品名称']
输出:
0 强力VC银翘片
1 清热解毒口服液
2 感康
Name: 商品名称, dtype: object
延伸:
#查询 商品编码 ,商品名称,销售数量 三列
salesDf[['商品编码','商品名称','销售数量']]
输出:
4)切片功能
#查询指定范围
salesDf.loc[:,'商品编码':'销售数量']
输出:
5)通过条件判断筛选
a. 构建查询条件
querySer=salesDf.loc[:,'销售数量']>2
querySer
输出:
0 True
1 False
2 False
Name: 销售数量, dtype: bool
#查看数据类型
type(querySer)
输出:
pandas.core.series.Series
b. 应用查询条件
salesDf.loc[querySer,:]
输出:
数据分析的基本过程
数据分析步骤:
提出问题→理解数据→数据清洗→构建模型→数据可视化
1、提出问题
a.月均消费次数
b.月均消费金额
c.客单价
d.消费趋势
2、理解数据
1)读取Excel数据
#读取Excel数据
fileNameStr='.../朝阳医院2018年销售数据.xlsx'
xls=pd.ExcelFile(fileNameStr)
salesDf=xls.parse('Sheet1')
2)数据集描述统计信息
a. 打印前5行
#打印前5行
salesDf.head()
输出:
b. 统计行数,列数
#统计行数,列数
salesDf.shape
输出:
(6578, 7)
c. 查询某列的数据类型
#查看'购药时间'一列的数据类型
salesDf.loc[:,'购药时间'].dtype
输出:
dtype('O')
d. 查看所有列的数据类型
#查看所有列的数据类型
salesDf.dtypes
输出:
购药时间 object
社保卡号 object
商品编码 object
商品名称 object
销售数量 object
应收金额 object
实收金额 object
dtype: object
e.每一列的统计数
#每一列的统计数
salesDf.describe()
输出:
3、数据清洗
数据清洗的基本过程:
选择子集→列名重命名→缺失数据处理→数据类型转换→数据排序→异常值处理
1.选择子集
#选择子集
subSalesDf=salesDf.loc[0:4,'购药时间':'销售数量']
subSalesDf
输出:
2.列名重命名
colNameDict={'购药时间':'销售时间'}
'''
inplace=False,数据框本身不会变,而会创建一个新数据框,inplace默认Flase;
inplase=True,数据框本身会改动
'''
salesDf.rename(columns=colNameDict,inplace=True)
salesDf.head()
输出:
3.缺失数据处理
print('删除缺失值前的大小',salesDf.shape)
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
print('删除缺失值后的大小',salesDf.shape)
输出:
删除缺失值前的大小 (6578, 7)
删除缺失值后的大小 (6575, 7)
4.数据类型转换
(1)字符串转化为数值
#字符串转化为数值(浮点数)
salesDf['销售数量']=salesDf['销售数量'].astype('float')
salesDf['应收金额']=salesDf['应收金额'].astype('float')
salesDf['实收金额']=salesDf['实收金额'].astype('float')
print('转化后的数据类型:n',salesDf.dtypes)
输出:
转化后的数据类型:销售时间 object
社保卡号 object
商品编码 object
商品名称 object
销售数量 float64
应收金额 float64
实收金额 float64
dtype: object
(2)处理日期
'''
定义函数:分割销售日期,获得销售日期
输出:timecolSer销售时间一列是Series数据类型
输出:分割后的时间,返回也是个Serries数据类型
'''
def splitSaletime(timeColSer):timeList=[]for value in timeColSer:dateStr=value.split(' ')[0]timeList.append(dateStr)#将列表转换为一维数据Series类型timeSer=pd.Series(timeList)return timeSer
#获取销售时间一列
timeSer=salesDf.loc[:,'销售时间']
#分割字符串,获取销售日期
dateSer=splitSaletime(timeSer)
#修改销售时间一列的值
salesDf.loc[:,'销售时间']=dateSer
salesDf.head()
输出
(3)字符串转换为日期
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
salesDf.dtypes
输出:
销售时间 datetime64[ns]
社保卡号 object
商品编码 object
商品名称 object
销售数量 float64
应收金额 float64
实收金额 float64
dtype: object
5.数据排序
#按销售日期进行升序排序
salesDf=salesDf.sort_values(by='销售时间',ascending=True)
salesDf.head()
输出
#重命名行名(index)
salesDf=salesDf.reset_index(drop=True)
salesDf.head()
输出:
#每列的描述统计信息
salesDf.describe()
输出:
(6)异常值处理
#删除异常值:通过条件判断筛选出数据
#查询条件
querySer=salesDf.loc[:,'销售数量']>0
#应用查询条件
print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)
输出:
删除异常值前: (6549, 7)
删除异常值后: (6506, 7)
4、构建模型
业务指标1:月均消费次数=总消费次数/月份数
(总消费次数:同一天内,同一个人发生的所有消费算作一次消费)
求总消费次数
#第一步:删除重复数据
kpi1_Df=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
#第二步:行数
totalⅠ=kpi1_Df.shape[0]
print('总消费次数=',totalⅠ)
输出:
总消费次数= 5342
求月份数
#第一步:排序
#按销售时间升序
kpi1_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)
#重命名排名
kpi1_Df=kpi1_Df.reset_index(drop=True)
#第二步:获取时间范围
#最小时间值
startTime=kpi1_Df.loc[0,'销售时间']
#最大时间值
endTime=kpi1_Df.loc[totalⅠ-1,'销售时间']
#第三步:计算月份数
#天数
daysⅠ=(endTime-startTime).days
#月份数
monthsⅠ=daysⅠ//30
print('月份数:',monthsⅠ)
输出
6
求月均消费次数
kip1_Ⅰ=totalⅠ//monthsⅠ
print('业务指标1:月均消费次数=',kip1_Ⅰ)
输出:
业务指标1:月均消费次数= 890
业务指标2:月均消费金额=总消费金额/月份数
#总消费金额
totalMoneyF=salesDf.loc[:,'实收金额'].sum()
#月均消费金额
monthMoneyF=totalMoneyF/monthsⅠ
print('业务指标2:月均消费金额=',monthMoneyF)
输出
业务指标2:月均消费金额= 50668.351666666305
业务指标3:客单价=总消费金额/总消费次数
pct=totalMoneyF/totalⅠ
print('客单价:',pct)
输出:
客单价: 56.9094178210404
总结:
数据分析步骤:
提出问题→理解数据→数据清洗→构建模型→数据可视化
数据清洗步骤:
选择子集→列名重命名→缺失数据处理→数据类型转换→数据排序→异常值处理
数据框按行拼接_利用Python进行数据分析相关推荐
- python 数据框按行拼接_使用python进行数据分析
Python常用的两类数据分析包:numpy.pandas 一.一维数据分析 (1)numpy数据包的导入.一维数据组的赋值与查询 (2)numpy一维数据与列表的区别 1.可以用来实现统计功能 如计 ...
- python统计行号_利用Python进行数据分析(第三篇上)
上一篇文章我记录了自己在入门 Python 学习的一些基础内容以及实际操作代码时所碰到的一些问题. 这篇我将会记录我在学习和运用 Python 进行数据分析的过程: 介绍 Numpy 和 Pandas ...
- java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析
引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...
- python处理水站的数据_利用Python进行数据分析(一):数据清洗与准备
b站的小伙伴们大家吼~~ 在b站摸了快四年鱼的菜鸡也想开始做知识分享了,虽然说是分享其实根本目的也是为了督促自己好好学习把QAQ. 从今天开始,我将会在专栏分享我在学习<利用Python进行数据 ...
- python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
- 利用python进行数据分析 笔记_利用python进行数据分析(O#039;Relly)学习笔记-一团网...
利用python进行数据分析(O'Relly)学习笔记 1.第一个bug import pandas plot(arrange(10)) #报错name 'plot' is not defined. ...
- python怎么做面板数据分析_利用python进行数据分析之准备(一)
原标题:利用python进行数据分析之准备(一) 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数 ...
- 利用python进行数据分析_利用python进行数据分析复现(1)
一直以来,都想学习python数据分析相关的知识,总是拖拖拉拉,包括这次这个分享也是.<利用python进行数据分析 第2版>是一次无意之间在简书上看到的一个分享,我决定将很详细.一直都 ...
- 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)
原博文 2016-06-17 23:21 − 以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频 ...
最新文章
- 友盟小米收不到推送消息_Android 手机收不到消息推送的设置指南 - 融云 RongCloud...
- 使用phpMyAdmin时出现PHP 5.3+is required的解决方案
- GPS经纬度算附近有什么 --- GeoHash核心原理解析
- python pip升级 指向不同python版本
- oracle_18c新建用户用normal登陆失败
- 微型计算机接口位于什么之间,io接口位于什么和什么之间
- 华人AI界痛失“一代宗师”,计算机视觉之父黄煦涛教授去世
- python开发转行渗透测试_月薪45K的大牛用Python开发一款密码攻击测试器!密码形同虚设!...
- [转载]ASP.NET 格式化字符串
- 使用ViewFlipper实现广告图片的自动轮播的效果
- 转 Java工程师成神之路
- protel 99se快捷键 总结
- Java精品项目源码第111期小蜜蜂扩音器网上商城系统
- 【UI设计】零基础带你入门UI设计
- 软件测试工作学习必备指南——硬实力
- 软件开发中 常见英文文档 缩写(转)
- 洛谷-3387 【模板】缩点
- word段落操作快捷键(一)
- python unicode编码转换中文_python实现unicode转中文及转换默认编码的方法
- python爬虫:爬虫进阶之多线程爬虫
热门文章
- 2013.10u-boot移植之SD保存环境变量
- react 遍历对象_探索:跟随《Build your own React》实现一个简易React
- ajax.ajaxmethod无效,jQuery Ajax调用httpget webmethod(C#)无效
- 云时代的智能运维平台,助力企业创新迭代
- 独家首发 | 900页阿里文娱技术实战,8大技术栈解析技术全景
- Cocos 2d-x 3.3版本升级 五大维度提升3D品质
- 第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)
- ORACLE TEXT DATASTORE PREFERENCE(三)
- Linux 上安装 appium
- noi.ac NA529 【神树的矩阵】