【问题标题】:I want to find an existing col/row and edit it我想找到一个现有的 col/row 并编辑它
【发布时间】:2022-01-13 21:57:23
【问题描述】:

所以我正在为一个项目开发一个 RFID 系统。我是在运行 python3 的树莓派上写的。

我有这些 RFID 标签,您可以对其进行扫描,它会记录被标记的信息。这总结了 excel 中的这些列:

"worker_name": "", “日期”: ””, “登记时间”: ””, “退房时间”: ””, "hours_worked": ""


我可以在签入时填写所有这些值,显然 check_out_time 除外,因为它应该在第二次扫描标签时填写。

所以我的问题是我不知道如何编辑该列,当扫描标签进行签出时,签出时间也记录在原始列中,而不创建新列。

我们所说的代码如下:

import pandas as pd
from datetime import datetime
from time import sleep


counter = 1

df = pd.DataFrame(
    {
        "worker": "",
        "date": "",
        "check_in_time": "",
        "check_out_time": "",
        "hours_worked": "",
    },
    index=[counter],
)

while True:

    worker = input("Navn \n")
    time_now = datetime.now()

    date = time_now.strftime("%m/%d/%Y")
    time = time_now.strftime("%H:%M")
    month = time_now.strftime("%m")

    new_check_in = [worker, date, time, "", "dummy_value"]

    df.loc[counter] = new_check_in

    df.reset_index(drop=True)
    df.to_excel("output.xlsx", index=False)

    counter += 1

输出如下:

     worker        date    check_in_time check_out_time  hours_worked
1  Homer Simpson  12/09/2021   02:14                     dummy_value
2  Marge Simpson  12/09/2021   02:14                     dummy_value
3   Bart Simpson  12/09/2021   02:14                     dummy_value
4  Peter Griffin  12/09/2021   02:14                     dummy_value

这是一个例子的证明,因为我还没有实现你扫描标签的部分,但概念应该保持不变。

因此,当索引 1 的工人完成他的工作日时,他会使用他的标签结账,并且存储他的信息的数据框列应该随着结账时间而更新。

谢谢大家,亲切的问候!

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    假设所有工作人员的姓名不同,您可以尝试检查各自列中的worker/date 值,如果出现check_out_time,请填写。

    您的代码的后一部分可能如下所示,例如:

    while True:
    
        worker = input("Navn \n")
        time_now = datetime.now()
    
        date = time_now.strftime("%m/%d/%Y")
        time = time_now.strftime("%H:%M")
    
        if ((df['worker'] == worker) & (df['date'] == date)).any():
            idx = df.iloc[(df['worker'] == worker) & (df['date'] == date)]
            df.at[idx, check_out_time] = time
            df.at[idx, hours_worked] = time - df.at[idx, check_in_time]
    
        new_check_in = [worker, date, time, "", np.nan]
    
        df.loc[counter] = new_check_in
    
        df.reset_index(drop=True)
        df.to_excel("output.xlsx", index=False)
    
        counter += 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2015-10-20
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多