Python 数据帧未正确求和

Python 数据帧未正确求和,python,pandas,tabula,Python,Pandas,Tabula,我有一个pdf,我已经用tabla转换成了熊猫数据框。因为有很多我不感兴趣的信息,所以我使用了tabla的area方法对数据集进行了格式化,这样我就可以访问我感兴趣的两个字段(分别在Number和Hours列中的Employee ID和Total Hours per Pay Period)。我使用几个for循环和if语句来查找我感兴趣的值周围的字符串。代码应该是每个员工id的工时总和。请注意,有两个数据框,因为我无法使用tabla将id编号与支票编号分开,因此一个数据框中的支票编号字符串为空 使

我有一个pdf,我已经用tabla转换成了熊猫数据框。因为有很多我不感兴趣的信息,所以我使用了tabla的area方法对数据集进行了格式化,这样我就可以访问我感兴趣的两个字段(分别在Number和Hours列中的Employee ID和Total Hours per Pay Period)。我使用几个for循环和if语句来查找我感兴趣的值周围的字符串。代码应该是每个员工id的工时总和。请注意,有两个数据框,因为我无法使用tabla将id编号与支票编号分开,因此一个数据框中的支票编号字符串为空

使用附近的值进行提取的一个示例是,工时(在“小时”列中)始终位于名称列中带有“Check Deposition:”的行上方一行。对于大多数脚本来说,这很好,但有两次它似乎跳过了它要检查的字符串,而转到下一个“Check deposted:”实例。奇怪的是,对于其中一个,循环应该先转到下一个员工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, row in islice(df.iterrows(), ele, 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)

为了产生它,请分享数据,或模拟数据,可以帮助复制这个错误,你看到的。根据这里的内容,我认为你的循环不知何故失去了同步。