Python还能这么玩之只用30行代码从excel提取个人值班表

  • Post category:Python

下面是 “Python还能这么玩之只用30行代码从excel提取个人值班表” 的完整实例教程。

1. 实现目标

本文将通过 Python 读取 Excel 表格,提取个人值班表中的信息,包括人员姓名、班次、值班时间等内容,并最终输出文本结果。

2. 实现步骤

为了实现目标,我们需要经过以下步骤:

  1. 安装并导入相关模块
  2. 加载 Excel 文件
  3. 处理 Excel 数据
  4. 输出处理结果

下面就分别介绍这四个步骤的实现方法。

2.1 安装并导入相关模块

在 Python 中操作 Excel 表格,需要使用到 pandasxlrd 两个库。如果这两个库没有被安装,可以通过以下命令进行安装:

pip install pandas xlrd

安装完成后在代码中导入这些库:

import pandas as pd

2.2 加载 Excel 文件

加载 Excel 文件需要使用到 pandas 库中的 read_excel 方法。该方法可以载入 Excel 文件,并且返回一个 pandas 中的 DataFrame 对象,方便我们对数据进行处理。

# 加载 Excel 文件
df = pd.read_excel('example.xlsx')

我们在这里假设 Excel 文件名为 example.xlsx,请根据实际情况修改文件名。

2.3 处理 Excel 数据

Excel 文件载入后,我们需要根据具体需求对数据进行处理,取出所需的信息。在本例中,我们需要从 Excel 表格中找出人员姓名、班次、值班时间这三个信息。

首先,我们要找出表格中人员姓名、班次、值班时间所在的列。我们可以通过 Excel 表头关键字进行匹配。例如,表格中人员姓名列的表头关键字为“姓名”,相应的代码可以写成:

# 找到“姓名”的列号
name_col = df.columns[df.columns.str.contains('姓名')][0]

接着,我们可以遍历表格,对每一个值班人员的值班时间进行遍历,找出各自的值班时间和班次,并将这些信息存储到一个字典中。最终,将所有字典放入列表中。

# 处理数据
duty_list = []

for i in range(df[name_col].size):
    row = df.iloc[i]
    name = row[name_col]

    for j in range(name_col, row.size):
        value = row[j]

        if pd.isna(value):
            continue

        duty_time = df.columns[j]
        duty_type = value
        duty = {'姓名': name, '班次': duty_type, '值班时间': duty_time}

        duty_list.append(duty)

2.4 输出处理结果

最后,我们将提取到的信息输出成为文本格式。这里的输出方式是将信息建立成 pandas 中的 DataFrame 对象,然后使用 to_string() 方法将其转换为字符串。

# 输出结果
df = pd.DataFrame(duty_list)
result = df.to_string(index=False)

print(result)

这样,我们就可以把提取到的信息输出出来了。

3. 示例说明

下面通过两个示例说明本文的代码如何处理 Excel 表格。

3.1 示例一

下表为一个值班表,其中有三名员工分别为张三、李四和王五,每人值班两天,共 6 天。

姓名 星期一 星期二 星期三 星期四 星期五 星期六
张三 坐班 伏案搞科研 坐班 休息 坐班 休息
李四 休息 坐班 休息 坐班 休息 坐班
王五 坐班 坐班 休息 坐班 休息 坐班

我们运行代码后,打印输出结果如下:

姓名 班次     值班时间
张三  坐班  星期一
张三  伏案搞科研  星期二
张三  坐班  星期三
张三  休息  星期四
张三  坐班  星期五
张三  休息  星期六
李四  休息  星期一
李四  坐班  星期二
李四  休息  星期三
李四  坐班  星期四
李四  休息  星期五
李四  坐班  星期六
王五  坐班  星期一
王五  坐班  星期二
王五  休息  星期三
王五  坐班  星期四
王五  休息  星期五
王五  坐班  星期六

3.2 示例二

下表为另一个值班表,其中有三名员工分别为张三、李四和王五,其中张三只值班了两天,而李四和王五均值班三天。

姓名 星期一 星期二 星期三 星期四 星期五 星期六
张三 休息 休息 坐班 坐班 休息 休息
李四 坐班 坐班 坐班 休息 休息 坐班
王五 坐班 休息 坐班 坐班 坐班 休息

我们运行代码后,打印输出结果如下:

姓名 班次     值班时间
张三  休息  星期一
张三  休息  星期二
张三  坐班  星期三
张三  坐班  星期四
张三  休息  星期五
张三  休息  星期六
李四  坐班  星期一
李四  坐班  星期二
李四  坐班  星期三
李四  休息  星期四
李四  休息  星期五
李四  坐班  星期六
王五  坐班  星期一
王五  休息  星期二
王五  坐班  星期三
王五  坐班  星期四
王五  坐班  星期五
王五  休息  星期六

可以看到,本文的代码可以处理多种不同的值班表,只需要修改 Excel 表格中的表头关键字即可。