试试除了 IndexError - 我没有得到想要的结果

try except IndexError - I am not getting the desired result

我正在尝试读取 PDF 文件并将它们转换为 Python 中的干净数据框。 我遍历所有相关页面,并希望逐步附加数据帧以获得包含所有信息的大 table。

第 32-33 页的处理方式与其他页面略有不同(否则会引发 IndexError)。 我试图通过使用 try-except 来解决这个问题。 但是,在 运行 代码之后,ledig['2000'] 中缺少第 32-33 页的信息,这是生成的数据框。

我尝试单独执行 except 块中的代码并且它有效(如果我只阅读 pp.32-33)。

有什么想法吗?

因为我是第一次使用 try-except,所以我当然可能以某种方式误解了这个概念。

我的代码:

import camelot
ledig = {}
d = 2000
df_name = str(d)
tables = camelot.read_pdf('https://www.estv.admin.ch/dam/estv/de/dokumente/allgemein/Dokumentation/Zahlen_fakten/Steuerstatistiken/steuerbelastung_gemeinden/'+str(d)+'/BAE/Bruttoarbeitseinkommen%20Lediger.pdf.download.pdf/'+str(d)+'_bruttoarbeit_lediger_'+str(d)+'.pdf', pages="2-end", flavor='stream')
j = tables.n - 1
ledig[df_name] = pd.DataFrame()
for i in range(0,j):
    try:
        row = tables[i].df[tables[i].df.iloc[:,1] == '20'].index.tolist() #look for value "20", we want to move that to the top and delete rows above
        df = tables[i].df[row[0]:]
        new_header = df.iloc[0] #grab the first row for the header
        df = df[1:] #take the data less the header row
        df.columns = new_header #set the header row as the df header
        df = df.replace('-','0')
        df.iloc[:, 1:] = df.iloc[:, 1:].apply(pd.to_numeric)  
        ledig[df_name] = ledig[df_name].append(df)
        ledig[df_name] = ledig[df_name].dropna()
        ledig[df_name].drop_duplicates(keep=False,inplace=True) 
    except IndexError:
        row = tables[i].df[tables[i].df.iloc[:,2] == '20'].index.tolist() #look for value "20", we want to move that to the top and delete rows above
        df = tables[i].df[row[0]:]
        df = df.drop(df.columns[[1,3]], axis=1) 
        new_header = df.iloc[0] #grab the first row for the header
        df = df[1:] #take the data less the header row
        df.columns = new_header #set the header row as the df header
        df = df.replace('-','0')
        df.iloc[:, 1:] = df.iloc[:, 1:].apply(pd.to_numeric)  
        df.fillna(0, inplace = True)  
        ledig[df_name] = ledig[df_name].append(df)
        ledig[df_name] = ledig[df_name].dropna()
        ledig[df_name].drop_duplicates(keep=False,inplace=True)

您对 try/except 的用法是正确的。

问题出在df = df.drop(df.columns[[1,3]], axis=1):您不应该删除第 4 列 (3)。

如果您使用 df = df.drop(df.columns[[1]], axis=1),则会正确附加第 32 和 33 页的表格。