Python数据分析基础之Excel文件(3)

选取特定列

  有些时候,我们并不需要工作表中所有的列。我们可以用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()

  在命令行窗口中运行这个脚本,得到输出文件。
在这里插入图片描述

发布了42 篇原创文章 · 获赞 17 · 访问量 5354

猜你喜欢

转载自blog.csdn.net/qq_45554010/article/details/104213107