Pandas 数据框求和不正确

问题描述

我有一个 pdf,我已经使用 tabula 将其转换为 pandas 数据框。由于有相当多的信息我不感兴趣,我使用 tabula 的 area 方法来格式化数据集,以便我可以访问我感兴趣的两个字段(员工 ID 和数字中每个支付期的总工作时间)和小时列,分别)。我使用了几个 for 循环和 if 语句来查找我感兴趣的值周围的字符串。代码应该总结每个员工 ID 的工作时间。请注意,有两个数据框,因为我无法使用 tabula 将 ID 号与支票号分开,因此一个数据框的支票号字符串为空字符串。

使用附近值提取一个示例是,工作时间(在小时列中)始终位于名称列中带有“支票存款:”的行上方的一行。对于大多数脚本来说,这很好,但两次它似乎跳过了它检查的字符串,而是转到“Check Deposited:”的下一个实例。奇怪的是,对于这两个中的一个,循环应该首先移动到下一个员工 ID。相反,它再次使用第一个 ID 号,但获取第二个 ID 号的第一个工时值。然后第二个 ID 开始并为自己获取相同的第一个数字(这是正确的),但随后跳过了自己的工作时间。

知道我做错了什么吗?谢谢!

import tabula
from tabula.io import read_pdf
import pandas as pd
import numpy as np
from itertools import islice


# Read PDF into list of DataFrame
#dataframe = tabula.read_pdf("Payroll register Dept 2020 04.01.20 - 03.31.21.pdf",pages='all')

#tabula.convert_into("Payroll register Dept 2020 04.01.20 - 03.31.21.pdf","output.csv",columns = (100,190,250,300,400),output_format="csv",pages='all',guess=False)

df1 = pd.read_csv("output.csv",skiprows = 6)
output = pd.DataFrame(columns = ["Employee ID","Hours Worked"])
_id = []
_hours = []
_check = []
print(output)

df = df1.replace(np.nan,'',regex=True)

for e,i in enumerate(df["Name"]):
    
    if df["Name"].loc[e]== "Check Printed:" or 'Site Mana'in df["Name"][e]:
        df["Number"].loc[e] = ''

df.to_csv("Output_2.csv")

for ele,num in enumerate(df["Number"]):
    if num != '' and num.isnumeric() and num not in _id:
        _id.append(num)
        for index,row in islice(df.iterrows(),ele,None):

            if "Check Printed:" in df["Name"][index]:
                _hours.append(float(df["Hours"].iloc[index -1]))
                _check.append(df1["Number"][index])
                break
    elif num != '' and num.isnumeric() and num in _id:

        for index,None):
            if "Check Printed" in df["Name"][index] and df1["Number"][index] not in _check:

                print(df1["Number"][index])
                _hours[_id.index(num)] += float(df["Hours"].iloc[index -1])
                print(_hours[_id.index(num)])

                _check.append(df1["Number"][index])

                break


output["Employee ID"] = _id
output["Hours Worked"] = _hours

print(output)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...