python 数据分析基础二:excel文件处理(二)(对行内容的一系列操作)

第一章博主已经讲了对excel的基本读写,今天的整点在与基础python及利用pandas对excel工作表的行的操作

那么为了学习的继续,我们依然需要那三个excel文件,这个我们可以去一个地址下载:传送门
当然由于是外网github社区所以会比较慢,但是文件本身并没有特别大,所以小伙伴只需要等待片刻即可

文件
在这里插入图片描述

筛选特定行(使行中的值满足某一条件)

基础Python操作

代码:

from datetime import date
from xlrd import  open_workbook,xldate_as_tuple
from xlwt import Workbook
input_file="sales_2013.xlsx"
output_file="output.xlsx"
out_work=Workbook()#创建操作对象
out_sheet=out_work.add_sheet("jan_2013")
sales_index=3
with open_workbook(input_file) as workbook:
    worksheet=workbook.sheet_by_name("january_2013")
    data=[]
    header=worksheet.row_values(0)
    data.append(header)
    for row_index in range(1,worksheet.nrows):
        row_list=[]
        sale=worksheet.cell_value(row_index,sales_index)
        sale_amount=float(str(sale).strip("$").replace(",",""))
        if sale_amount >1400:
            for col_index in range(worksheet.ncols):
                cell_value=worksheet.cell_value(row_index,col_index)
                if worksheet.cell_type(row_index,col_index)==3:
                    date_cell=xldate_as_tuple(cell_value,workbook.datemode)
                    date_cell=date(*date_cell[0:3]).strftime("%m/%d/%Y")
                    row_list.append(date_cell)
                else:
                    row_list.append(cell_value)
        if row_list:
            data.append(row_list)
    print(list(enumerate(data)))#enumerate函数将一个可遍历的数据组合为一个索引对象,同时列出索引和下标 enumerate为动词本身具有列举枚举的意思
    for list_index,out_list in enumerate(data):#
        for element_index,element in enumerate(out_list):
            out_sheet.write(list_index,element_index,element)
out_work.save(output_file) 

这里不论是时间格式化还是其他的细节内容上一篇博主已经讲过,便不再多言
需要讲解的:
enumerate()函数,该函数是属于基本python的,

enumerate()函数:可以将列表,元组等数据类,分开为一个个单独的元素,且不可迭代,如下↓
在这里插入图片描述

利用pandas筛选特定行

代码:

import pandas as pd
input_file="sales_2013.xlsx"
out_file="output.xlsx"
data_frame=pd.read_excel(input_file,"january_2013",index_col=None)#重新设置一列为index
print(data_frame["Sale Amount"])
data_frame_value=data_frame[data_frame["Sale Amount"].astype(float)>1400]#.astype函数
writer=pd.ExcelWriter(out_file)
data_frame_value.to_excel(writer,sheet_name="jan_2013",index=False)
writer.save()

前文说过pandas含有处理excel的模块。

这里使用data_frame_value=data_frame[data_frame[“Sale Amount”].astype(float)>1400] 我们这里使用astype()函数对该数字进行判断。
后面的
writer=pd.ExcelWriter(out_file),表示创建写入的excel对象。
data_frame_value.to_excel(writer,sheet_name=“jan_2013”,index=False) 这里的index=False表示不显示索引
over

筛选特定行(使行中的值属于每一列表)

基础python实现

代码:

from datetime import date
from xlrd import open_workbook,xldate_as_tuple
from xlwt import Workbook
input_file="sales_2013.xlsx"
output_file="output.xlsx"
out_workbook=Workbook()
out_worksheet=out_workbook.add_sheet("jan_2013")
need_time=["01/27/2013","01/31/2013"]
time_index=4
with open_workbook(input_file) as workbook:
    worksheet=workbook.sheet_by_name("january_2013")
    data=[]
    header=worksheet.row_values(0)#row_values()
    data.append(header)
    print(data)
    for row_index in range(1,worksheet.nrows):
        time_cell=xldate_as_tuple(worksheet.cell_value(row_index,time_index),workbook.datemode)
        time_cell=date(*time_cell[0:3]).strftime("%m/%d/%Y")
        row_list=[]
        if time_cell in need_time:
            for col_index in range(worksheet.ncols):
                cell_value=worksheet.cell_value(row_index,col_index)
                if worksheet.cell_type(row_index,col_index)==3:
                    date_cell=xldate_as_tuple(cell_value,workbook.datemode)
                    date_cell=date(*date_cell[0:3]).strftime("%m/%d/%Y")
                    row_list.append(date_cell)
                else:
                    row_list.append(cell_value)
            if row_list:
                data.append(row_list)
    for list_index,out_list in enumerate(data):
        for index,element in enumerate(out_list):
            out_worksheet.write(list_index,index,element)
out_workbook.save(output_file)

与上一段代码类似,有部分不同的地方
这里我需要补充一下最后这一段代码:

    for list_index,out_list in enumerate(data):
        for index,element in enumerate(out_list):
            out_worksheet.write(list_index,index,element)

我们将enumerate(data)以list的形式打印出来:
在这里插入图片描述
那么这段代码便很容易理解了,第一个循环是在元组中遍历,第二个循环在元组的列表中遍历,实现将单元格的内容一五一十的写入

利用pandas实现

import pandas as pd
input_file="sales_2013.xlsx"
output_file="output.xlsx"
data_frame=pd.read_excel(input_file,"january_2013",index_col=None)
need_time=["01/24/2013","01/31/2013"]
data_frame_value=data_frame[data_frame["Purchase Date"].isin(need_time)]
writer=pd.ExcelWriter(output_file)
data_frame_value.to_excel(writer,sheet_name="jan_2013",index=False)#index=False表示输出不显示索引值
writer.save()

我们之前在讲csv文件处理的时候提到pandas处理类似这样问题的时候使用pandas带有的isin函数。
**data_frame_value=data_frame[data_frame[“Purchase Date”].isin(need_time)]**这段便是我们引用isin函数的地方,很好理解,形式更多的还是依靠记忆。
这里再重复一下之前的把内容
index_col=None重新设置一类为index
index=False输出不显示索引值

下一章内容为处理列相关问题。需要借鉴学习excel的小伙伴可以关注博主哦,还可以顺便点个赞哦。

over

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值