发布于2020-03-09 16:17 阅读(1786) 评论(0) 点赞(13) 收藏(5)
选取特定列
有些时候,我们并不需要工作表中所有的列。我们可以用Python选取出需要保留的列。
有两种方法可以在Excel文件中选取特定的列:
1.使用列索引值;
2.使用列标题。
1.1 使用列索引值(基础Python)
这里我们以保留之前的january_2013工作表中Customer Name和Purchase Date这两列为例。代码如下:
#!/usr/bin/env python3
import sys
from datetime import date
from xlrd import open_workbook, xldate_as_tuple
from xlwt import Workbook
input_file = sys.argv[1]
output_file = sys.argv[2]
output_workbook = Workbook()
output_worksheet = output_workbook.add_sheet('jan_2013_output')
my_columns = [1, 4]
with open_workbook(input_file) as workbook:
worksheet = workbook.sheet_by_name('january_2013')
data = []
for row_index in range(worksheet.nrows):
row_list = []
for column_index in my_columns:
cell_value = worksheet.cell_value(row_index, column_index)
cell_type = worksheet.cell_type(row_index, column_index)
if cell_type == 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)
data.append(row_list)
for list_index, output_list in enumerate(data):
for element_index, element in enumerate(output_list):
output_worksheet.write(list_index, element_index, element)
output_workbook.save(output_file)
上面的代码中,列表变量my_columns包含整数1和4,分别代表了Customer Name和Purchase Date这两列的索引值。其他代码与之前练习过的代码类似,在这里不再赘述。
我们在命令行窗口中运行这个脚本,得到输出文件。
1.2 使用列索引值(pandas)
使用pandas模块根据列索引值选取特定列,我们需要设置数据框以及用到iloc函数。这里需要提到一点,iloc函数可以使我们同时选择特定的行和特定的列,所以如果我们想使用它选取特定的列,那么就需要在列索引值前面加上一个冒号和一个逗号,表示为这些特定的列保留所有的行,否则函数就会使用这些索引值去筛选行。
使用pandas模块的代码如下:
#!/usr/bin/env python3
import pandas as pd
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
data_frame = pd.read_excel(input_file, 'january_2013', index_col=None)
data_frame_column_by_index = data_frame.iloc[:, [1, 4]]
writer = pd.ExcelWriter(output_file)
data_frame_column_by_index.to_excel(writer, sheet_name='jan_13_output', index=False)
writer.save()
在命令行窗口中运行这个脚本,得到输出文件。
2.1 使用列标题(基础Python)
这种方法适用于想保留的列的标题非常容易识别,或者在处理多个输入文件的过程中,各个输入文件中列的位置会发生改变但标题不变的情况。代码如下:
#!/usr/bin/env python3
import sys
from datetime import date
from xlrd import open_workbook, xldate_as_tuple
from xlwt import Workbook
input_file = sys.argv[1]
output_file = sys.argv[2]
output_workbook = Workbook()
output_worksheet = output_workbook.add_sheet('jan_2013_output')
my_columns = ['Customer ID', 'Purchase Date']
with open_workbook(input_file) as workbook:
worksheet = workbook.sheet_by_name('january_2013')
data = [my_columns]
header_list = worksheet.row_values(0)
header_index_list = []
for header_index in range(len(header_list)):
if header_list[header_index] in my_columns:
header_index_list.append(header_index)
for row_index in range(1, worksheet.nrows):
row_list = []
for column_index in header_index_list:
cell_value = worksheet.cell_value(row_index, column_index)
cell_type = worksheet.cell_type(row_index, column_index)
if cell_type == 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)
data.append(row_list)
for list_index, output_list in enumerate(data):
for element_index, element in enumerate(output_list):
output_worksheet.write(list_index, element_index, element)
output_workbook.save(output_file)
上面的代码中,列表变量my_columns包含了要保留的两列的名称。因为这是要写入文件的列表题,所以直接将其加入到输出列表data中。其他代码与之前练习过的代码类似,在这里不再赘述。
我们在命令行窗口中运行这个脚本,得到输出文件。
2.2 使用列标题(pandas)
使用pandas模块根据列标题选取特定列,我们需要使用loc函数。和前面提到的iloc函数类似,如果我们想使用它选取特定的列,那么就需要在列索引值前面加上一个冒号和一个逗号,表示为这些特定的列保留所有的行,否则函数就会使用这些索引值去筛选行。
使用pandas模块的代码如下:
#!/usr/bin/env python3
import pandas as pd
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
data_frame = pd.read_excel(input_file, 'january_2013', index_col=None)
data_frame_column_by_name = data_frame.loc[:, ['Customer ID', 'Purchase Date']]
writer = pd.ExcelWriter(output_file)
data_frame_column_by_name.to_excel(writer, sheet_name='jan_13_output', index=False)
writer.save()
在命令行窗口中运行这个脚本,得到输出文件。
作者:我是小白兔
链接:https://www.pythonheidong.com/blog/article/248907/d2a201aa40c72e1bb1b2/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!