Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果找不到特定字符串,如何遍历数据帧列表并删除所有数据_Python_Python 3.x_Pandas_Python Camelot - Fatal编程技术网

Python 如果找不到特定字符串,如何遍历数据帧列表并删除所有数据

Python 如果找不到特定字符串,如何遍历数据帧列表并删除所有数据,python,python-3.x,pandas,python-camelot,Python,Python 3.x,Pandas,Python Camelot,我正在使用python库Camelot解析多个PDF文件,并提取这些PDF文件中的所有表。第一行代码返回以列表格式从pdf中刮取的所有表。我正在寻找一个表,特别是有一个独特的字符串在它。谢天谢地,这个字符串对于这个表是唯一的,所以理论上,我可以使用它来隔离我想要抓取的表 这些PDF或多或少是以相同的格式创建的,但是有足够的差异,我不能只在我想要的表上进行静态调用。例如,有时我想要的桌子会被第一张桌子刮掉,有时会被第三张桌子刮掉。因此,我需要编写一些代码来动态选择表 我脑海中的工作流程逻辑上是这样

我正在使用python库Camelot解析多个PDF文件,并提取这些PDF文件中的所有表。第一行代码返回以列表格式从pdf中刮取的所有表。我正在寻找一个表,特别是有一个独特的字符串在它。谢天谢地,这个字符串对于这个表是唯一的,所以理论上,我可以使用它来隔离我想要抓取的表

这些PDF或多或少是以相同的格式创建的,但是有足够的差异,我不能只在我想要的表上进行静态调用。例如,有时我想要的桌子会被第一张桌子刮掉,有时会被第三张桌子刮掉。因此,我需要编写一些代码来动态选择表

我脑海中的工作流程逻辑上是这样的:

在for循环之前创建一个空列表以将表附加到其中。调用for循环并迭代Camelot代码输出的列表中的每个表。如果表中没有我要查找的字符串,请删除该表中的所有数据,然后将空数据框附加到空列表中。如果它确实包含我要查找的字符串,请将其附加到空列表中,而不删除任何内容

有没有更好的办法?我相信可能有

我已经在我的代码中加入了我到目前为止所做的。我正在努力拼凑一个条件语句,以便在字符串存在时删除数据帧的所有行。我发现了很多在字符串存在的情况下删除列和行的例子,但对于整个数据帧却没有

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”运算符


您可以在一行中执行此操作:

dfcombined=pd.concat[t.df.values中的唯一值为t.df.values,否则为表中t的pd.DataFrame]
你需要一个if条件。类似这样的内容:if string_found:elist.append[]else:elist.appendtHow about dftemp=t.df[t.df.isin['Unique Value']]].dropna
for t in tables:
    dftemp = t.df

    #my attempt
    if "Unique Value" in dftemp.values:
        #append to the list
        elist.append(dftemp)