我正在尝试解析季度投资报表,以将交易导入Quicken,因为我的提供商(联邦政府的TSP)不支持在线下载。我想我已经知道如何创建一个可以用于快速导入的"qif“文件了。
我使用的是Python 3.8和pdfplumber。下面是pdf中其中一页的快照。

我需要从"Transaction Detail By Source“中解析具有过帐日期的事务。我需要的基金名称,以及与其他人张贴日期的交易。这是我的简单Python代码-
import pdfplumber
with pdfplumber.open(r'C:\Users\ra_d\\statements\Investments\TSP\1Q 2011.pdf') as pdf:
for x in pdf.pages :
print (x.extract_text())
#print (x.extract_words())
#print (x.extract_tables())好消息是,我可以解析pdf,并为图像中的部分生成以下输出-
TRANSACTION DETAIL BY SOURCE
Agency
Payroll Posting Automatic Agency
Office Date Transaction Type Employee (1%) Matching Total
Beginning Balance $0.00 $0.00 $0.00 $0.00
12400001 03/22/11 Auto Enrollment Contribution 69.00 23.00 69.00 161.00
Increase/Decrease in Value 0.05 0.02 0.05 0.12
Ending Balance $69.05 $23.02 $69.05 $161.12
TRANSACTION DETAIL BY FUND
Government Securities Investment (G) Fund
Number
Posting Transaction Share of Dollar
Date Transaction Type Amount Price Shares Balance
Beginning Balance $13.4882 0.0000 $0.00
03/22/11 Auto Enrollment Contribution $161.00 13.5752 11.8599
Ending Balance $13.5854 11.8599 $161.12当我使用extract_tables()函数时,我得到空格。
因此,我正在寻找关于如何改进这种解析的建议。我需要清楚地获取头部和它们的值,以便准确地处理它们。
非常感谢。RD
发布于 2021-03-03 04:07:26
def parser(filepath):
L = []
pdf = pdfplumber.open(filepath)
for i in range(15):
page = pdf.pages[i]
try:
table = page.extract_table()
df = pd.DataFrame(table)
if df.shape[0] > 1:
df = df.drop([0,2,5,6,8], axis=1)
for i in range(len(df)):
if df.iloc[i][4] != None:
df.iloc[i][3] = df.iloc[i][4]
df = df.drop([4], axis=1)
L.append(df)
if "Всего" in table[-1]:
break
except Exception:
continue
df = pd.concat(L)
df.columns = ["Раздел", "Слова", "Важность"]
df.reset_index(drop=True)
df = df.drop([0,1])
return dfhttps://stackoverflow.com/questions/61894786
复制相似问题