造轮子 python 随机数填写体温并获取其他表格数据和并生成总表

疫情原因,要求填写体温,于是造了一个用于随机填充体温的轮子。

[严正声明] 禁止任何组织、团体与个人以任何不正当方式使用此程序。

软件作者不承担任何由于不正确使用本程序造成的任何责任。】

用途:1.填充体温数据

2.获取其他表格数据(如学号等)避免反复粘贴复制

3.生成新的表格(格式(如合并单元格等)暂时无能为力,所能给予帮助,不胜感激)

表格格式如下

表格格式如上

首先引入模块

import random
import pandas as pd

读取模板(格式如上图所示)

df = pd.read_excel(
    "D:\\Documents\\学校事务\\学生体温监测统计表.xlsx",
    header=1,
    index_col=0
)  # 忽略第一行,以第二行的内容作为表头;且以“序号”列作为索引列

此时可以print一下看看是否正确,不正确可以在此步骤中进行修正
print(df)

读取源信息(格式如下图所示)

raw = pd.read_excel(
    "D:\\Documents\\学校事务\\班级信息.xlsx",
    sheet_name="全",
    header=0
)  # 以第一行的内容作为表头,只读取“全”表中的内容

源信息如上

随机体温生成

因为体温每次填写时每人7天,每天3次,故可先定义一个函数用于填写一个人一周的,然后50(我们班50人);也可以先填写50人一天的再7,本软件思路为第一种。

def random_maker():
    for i in range(3):
        make = random.randrange(358, 367)/10
        if(i == 0):
            result = str(make) + (r"/")
        elif(i == 1):
            result = result + str(make) + (r"/")
        else:
            result = result + str(make)
    return result
    ```

#### 开始正题:将数据置入pandas DataFrame 中
(请注意,理论上`df.loc()`函数可以直接用行号以及列号指定单元格位置以达到定位的目的,本软件为避免冲突以及方便读取使用列的名称作为参数)
```python
date = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]

for i in range(50):
    df.loc[i+3, "序号"] = i+1 
    #
    # 请一定注意此处的i+3,详情查阅Pandas DataFrame 的相关说明
    # Pandas DataFrame 本应从0 开始计数,但由于一开始读取时 “header=1,index_col=0”
    # 让程序从第二行作为起始行计数
    #
    print("【1】序号结束\n")
    df.loc[i+3, "姓名"] = raw.loc[i, "姓名"]  #loc() 既可以用于新增,也可以替换
    print("【2】姓名结束\n")
    df.loc[i+3, "学号"] = raw.loc[i, "学号"]
    print("【3】学号结束\n")
    df.loc[i+3, "学院"] = "临床医学院"
    print("【4】学院结束\n")
    df.loc[i+3, "专业"] = "临床医学"
    print("【5】专业结束\n")
    df.loc[i+3, "年级班级"] = "XXXX级XX班"
    print("【6】年级班级结束\n")
    df.loc[i+3, "家庭住址(详细地址)"] = raw.loc[i, "家庭住址"]
    print("【7】家庭住址(详细地址)结束\n")
    for j in range(7):
        df.loc[i+3, date[j]] = random_maker()
        if(j == 6):
            print("【8】体温结束\n")

结束,输出表格即可

df.to_excel("D:\\Desktop\\X班.xlsx")

完整代码如下

import random
import pandas as pd

df = pd.read_excel(
    "D:\\Documents\\学校事务\\潍坊医学院学生体温监测统计表.xlsx",
    header=1,
    index_col=0
)  # 忽略第一行,以第二行的内容作为表头;且以“序号”列作为索引列

print(df)

raw = pd.read_excel(
    "D:\\Documents\\学校事务\\班级信息.xlsx",
    sheet_name="全",
    header=0
)  # 以第一行的内容作为表头,只读取“全”表中的内容


def random_maker():
    for i in range(3):
        make = random.randrange(358, 367)/10
        if(i == 0):
            result = str(make) + (r"/")
        elif(i == 1):
            result = result + str(make) + (r"/")
        else:
            result = result + str(make)
    return result


date = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]

for i in range(49):
    df.loc[i+3, "序号"] = i+1
    print("【1】序号结束\n")
    df.loc[i+3, "姓名"] = raw.loc[i, "姓名"]
    print("【2】姓名结束\n")
    df.loc[i+3, "学号"] = raw.loc[i, "学号"]
    print("【3】学号结束\n")
    df.loc[i+3, "学院"] = "临床医学院"
    print("【4】学院结束\n")
    df.loc[i+3, "专业"] = "临床医学"
    print("【5】专业结束\n")
    df.loc[i+3, "年级班级"] = "2021级临床9班"
    print("【6】年级班级结束\n")
    df.loc[i+3, "家庭住址(详细地址)"] = raw.loc[i, "家庭住址"]
    print("【7】家庭住址(详细地址)结束\n")
    for j in range(7):
        df.loc[i+3, date[j]] = random_maker()
        if(j == 6):
            print("【8】体温结束\n")

# "潍坊医学院学生体温监测统计表(2022年1月24日-2022年1月30日)"

df.to_excel("D:\\Desktop\\9班.xlsx")

输出后由于无法搞定上面的合并单元格,暂时只能自行添加……


版权声明:本文为qq_43084170原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。