python excel文件处理_python 处理excel文件

1,加载excel文件为数据框

# 加载数据处理包pandas ,同时重命名为pd,以便后续简写方便

import pandas as pd

# 单独用一个变量存储文件名,一来便于代码重复利用,二来修改更方便

filenameStr = '/Users/chaorenbuhuifei/Downloads/第4关数据分析的基本过程/朝阳医院2018年销售数据.xlsx'

#pandas的ExcelFile 方法读取excel文件,参数 dtype = 'object' 保证正确读取所有数据

xls = pd.ExcelFile(filenameStr,dtype = 'object')

salesDf = xls.parse('Sheet1',dtype = 'object')

salesDf.head()

如果数据集过大,仅仅想处理数据集的一小部分内容则通过loc函数进行子集筛选

subSalesDf = salesDf.loc[0:10,'社保卡号':'实收金额']

subSalesDf

subSalesDf01 = salesDf.loc[0:10,['社保卡号','实收金额']]

subSalesDf01

subSalesDf02 = salesDf.loc[[0,1,9],['社保卡号','实收金额']]

subSalesDf02

2,列名重命名

通过数据框的rename方法来重命名列名,列名映射通过数据字典进行定义

# 通过数据字典进行列名重命名

colNameDict = {'购药时间':'销售时间'}

# inplace = True 直接改动数据库进行重命名

salesDf.rename(columns=colNameDict,inplace = True)

salesDf.head()

3,缺失数据处理

通过数据框的dropna进行缺失数据删除(入门级删除方案)

# 采用直接删除缺失值方法dropna进行缺失数据处理

# subset 指定删除依据的数据列,how = 'any' 表示任意一列有空值,就删除

print('删除缺失值前的大小为:',salesDf.shape)

salesDf = salesDf.dropna(subset = ['销售时间','社保卡号'],how = 'any')

print('删除缺失值后的大小为:',salesDf.shape)

删除缺失值前的大小为: (6578, 7)

删除缺失值后的大小为: (6575, 7)

4,数据类型转换

首先看一下数据框中每一列的数据类型

salesDf.dtypes

返回结果:

销售时间 object

社保卡号 object

商品编码 object

商品名称 object

销售数量 object

应收金额 object

实收金额 object

dtype: object

销售时间应该转换为时间类型,同时去掉星期几

# 通过字符串split方法定义一个处理列表的字符串拆分函数splitSaletime

def splitSaletime(timeColSer):

timeList = []

for value in timeColSer:

dateStr = value.split(' ')[0]

timeList.append(dateStr)

timeSer = pd.Series(timeList)

return timeSer

# 调用函数splitSaletime 处理销售时间列,去掉星期几

timeSer = salesDf.loc[:,'销售时间']

dateSer = splitSaletime(timeSer)

salesDf.loc[:,'销售时间'] = dateSer

salesDf.head()

返回结果:

销售时间列转换为时间类型

salesDf.loc[:,'销售时间'] = pd.to_datetime(salesDf.loc[:,'销售时间'],

format = '%Y-%m-%d',

errors = 'coerce')

salesDf.dtypes

返回结果

销售时间 datetime64[ns]

社保卡号 object

商品编码 object

商品名称 object

销售数量 object

应收金额 object

实收金额 object

dtype: object

继续处理其他列,销售数量、应收金额、实收金额全部转换为数字类型

# object 转换为float类型

salesDf['销售数量'] = salesDf['销售数量'].astype('float')

salesDf['应收金额'] = salesDf['应收金额'].astype('float')

salesDf['实收金额'] = salesDf['实收金额'].astype('float')

print('转换后的数据类型:\n',salesDf.dtypes)

返回结果:

转换后的数据类型:

销售时间 datetime64[ns]

社保卡号 object

商品编码 object

商品名称 object

销售数量 float64

应收金额 float64

实收金额 float64

dtype: object

5.数据排序

# sort_values按照日期进行排序

# by 指定排序依据,ascending=True 升序

salesDf = salesDf.sort_values(by = '销售时间',ascending=True)

salesDf.head()

返回结果:

重置索引

# reset_index索引重置

salesDf = salesDf.reset_index(drop=True)

salesDf.head()

返回结果

6,获取统计信息

# describe()获取描述统计信息

salesDf.describe()

返回结果:

从结果来看,销售数量、应收金额、实收金额中有小于0的异常值,下一步需要处理异常值

7,异常值处理

#删除异常值

# 构建查询条件

querySer = salesDf.loc[:,'销售数量']>0

print("删除异常值前",salesDf.shape)

#应用查询条件

salesDf = salesDf.loc[querySer,:]

print("删除异常值后",salesDf.shape)

返回结果:

删除异常值前 (6575, 7)

删除异常值后 (6532, 7)

再次查询统计信息

# describe()获取描述统计信息

salesDf.describe()

结果显示销售数量、应收金额、实收金额已无异常值。

综上,就是一个数据清洗步骤的实践过程选择子集

列名重命名

缺失数据处理

数据类型转换

数据排序

异常值处理秦艳超:数据分析基本过程:销售数据分析案例​zhuanlan.zhihu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值