如果找不到特定字符串,如何遍历数据框列表并删除所有数据
How to iterate through a list of Data frames and drop all data if a specific string isnt found
我正在使用 python 库 Camelot 解析多个 PDF 并提取这些 PDF 文件中的所有 table。第一行代码以列表格式返回从 pdf 中抓取的所有 tables。我正在寻找其中具有唯一字符串的 table。值得庆幸的是,这个字符串对于这个 table 是唯一的,所以理论上我可以用它来隔离我想要抓取的 table。
这些 pdf 或多或少是以相同格式创建的,但是存在足够多的差异,我不能只对我想要的 table 进行静态调用。比如我要的table有时候会是第一个table被刮掉,有时候会是第三个。因此,我需要编写一些代码才能动态地 select 和 table。
我心目中的工作流程逻辑上是这样的:
在 for 循环之前创建一个空列表以附加 tables。调用 for 循环并遍历 Camelot 代码输出的列表中的每个 table。如果 table 没有我要查找的字符串,请删除 table 中的所有数据,然后将空数据框附加到空列表中。如果它确实有我要查找的字符串,请将其附加到空列表而不删除任何内容。
有没有更好的方法来解决这个问题?我确定可能有。
我已将到目前为止的内容放在我的代码中。如果字符串存在,我很难将条件语句放在一起以删除数据帧的所有行。如果字符串存在,我发现了很多删除列和行的示例,但整个数据框没有任何内容
import camelot
import pandas as pd
#this creates a list of all the tables that Camelot scrapes from the pdf
tables = camelot.read_pdf('pdffile', flavor ='stream', pages = '1-end')
#empty list to append the tables to
elist = []
for t in tables:
dftemp = t.df
#my attempt at dropping all the value if the unique value isnt found. THIS DOESNT WORK
dftemp[dftemp.values != "Unique Value", dftemp.iloc[0:0]]
#append to the list
elist.append(dftemp)
#combine all the dataframes in the list into one dataframe
dfcombined = pd.concat(elist)
您可以在 dftemp.values 返回的 numpy 数组上使用 'in' 运算符
link
for t in tables:
dftemp = t.df
#my attempt
if "Unique Value" in dftemp.values:
#append to the list
elist.append(dftemp)
你可以在一行中完成:
dfcombined = pd.concat([t.df if "Unique Value" in t.df.values else pd.DataFrame() for t in tables ])
我正在使用 python 库 Camelot 解析多个 PDF 并提取这些 PDF 文件中的所有 table。第一行代码以列表格式返回从 pdf 中抓取的所有 tables。我正在寻找其中具有唯一字符串的 table。值得庆幸的是,这个字符串对于这个 table 是唯一的,所以理论上我可以用它来隔离我想要抓取的 table。
这些 pdf 或多或少是以相同格式创建的,但是存在足够多的差异,我不能只对我想要的 table 进行静态调用。比如我要的table有时候会是第一个table被刮掉,有时候会是第三个。因此,我需要编写一些代码才能动态地 select 和 table。
我心目中的工作流程逻辑上是这样的:
在 for 循环之前创建一个空列表以附加 tables。调用 for 循环并遍历 Camelot 代码输出的列表中的每个 table。如果 table 没有我要查找的字符串,请删除 table 中的所有数据,然后将空数据框附加到空列表中。如果它确实有我要查找的字符串,请将其附加到空列表而不删除任何内容。
有没有更好的方法来解决这个问题?我确定可能有。
我已将到目前为止的内容放在我的代码中。如果字符串存在,我很难将条件语句放在一起以删除数据帧的所有行。如果字符串存在,我发现了很多删除列和行的示例,但整个数据框没有任何内容
import camelot
import pandas as pd
#this creates a list of all the tables that Camelot scrapes from the pdf
tables = camelot.read_pdf('pdffile', flavor ='stream', pages = '1-end')
#empty list to append the tables to
elist = []
for t in tables:
dftemp = t.df
#my attempt at dropping all the value if the unique value isnt found. THIS DOESNT WORK
dftemp[dftemp.values != "Unique Value", dftemp.iloc[0:0]]
#append to the list
elist.append(dftemp)
#combine all the dataframes in the list into one dataframe
dfcombined = pd.concat(elist)
您可以在 dftemp.values 返回的 numpy 数组上使用 'in' 运算符 link
for t in tables:
dftemp = t.df
#my attempt
if "Unique Value" in dftemp.values:
#append to the list
elist.append(dftemp)
你可以在一行中完成:
dfcombined = pd.concat([t.df if "Unique Value" in t.df.values else pd.DataFrame() for t in tables ])