根据DataFrame-python从DataFrame列表中删除DataFrame?

根据DataFrame-python从DataFrame列表中删除DataFrame?,python,dataframe,Python,Dataframe,我有一个数据帧列表,我想从列表中删除满足以下任何条件的数据帧: 如果数据帧具有2列或更少的列 如果数据帧在任何位置包含字符串“A3” 我尝试的列长度代码如下所示。列表名为df_list: for i in df_list: if len(i.columns) == 1: del[i] 或 我尝试删除包含字符串“A3”的数据帧的代码如下: df_list = [i for i in df_list if not ('A3' in i.columns)] 我知道我的号码是错

我有一个数据帧列表,我想从列表中删除满足以下任何条件的数据帧:

  • 如果数据帧具有2列或更少的列
  • 如果数据帧在任何位置包含字符串“A3”
我尝试的列长度代码如下所示。列表名为df_list:

for i in df_list:
   if len(i.columns) == 1:
      del[i]

我尝试删除包含字符串“A3”的数据帧的代码如下:

df_list = [i for i in df_list if not ('A3' in i.columns)]

我知道我的号码是错的,但也没有在应该的时候从我的列表中删除任何内容,有人知道正确的方法吗?

这就是你要找的吗

import pandas as pd

url = 'https://www.bls.gov/web/empsit/cesbmart.htm'
df_list = pd.read_html(url)


key_word = 'CES'

delete_by_idx = []
for idx, dataframe in enumerate(df_list):
    A3_found = False

    # Check if A3 is in any row
    for i, row in dataframe.iterrows():
        if row.str.contains(key_word).any():
           A3_found = True

    # If A3 was found, delete the dataframe
    if A3_found == True:
        delete_by_idx.append(idx)  
        continue

    # If A3 is in the columns, delete the dataframe
    cols =  [ str(col_name) for col_name in list(dataframe.columns) ]
    if any(key_word in x for x in cols):
        delete_by_idx.append(idx) 
        continue

    # If columns less than or equal to 2, delete the dataframe
    if len(dataframe.columns) <= 2:
        delete_by_idx.append(idx) 
        continue

delete_by_idx.sort(reverse=True)
for each in delete_by_idx:        
    del df_list[each] 
将熊猫作为pd导入
url='1〕https://www.bls.gov/web/empsit/cesbmart.htm'
df_list=pd.read_html(url)
关键词='CES'
通过_idx=[]删除_
对于idx,枚举中的数据帧(df_列表):
A3_found=False
#检查A3是否在任何一行中
对于i,dataframe.iterrows()中的行:
如果row.str.contains(关键字).any():
A3_find=真
#如果找到A3,则删除数据帧
如果发现A3_==真:
通过\u idx.append(idx)删除\u
持续
#如果列中有A3,请删除数据帧
cols=[str(col\u name)表示列表(dataframe.columns)中的col\u name]
如果有(x中的关键字表示cols中的x):
通过\u idx.append(idx)删除\u
持续
#如果列小于或等于2,则删除数据帧
如果len(dataframe.columns)这将检查列名中是否有“A3”。然后可以使用相同的格式检查列的值

for each in df_list:
    if 'A3' in each.loc[0]:
        df_list.remove(each)

当你说“包含”时,你的意思是在列中还是在数据中?绝对是在数据框中的任何地方。我刚刚运行了它,它也没有从我的列表中删除任何内容??我的大多数数据帧都包含字符串这可能是问题所在吗?再试一次,我发现typo@Rose,对不起。我刚刚意识到,除非按降序,否则按索引删除是行不通的。我让它上升。这现在应该可以工作了,我刚刚运行了您建议的新代码,但是行“如果有('A3'在x中代表x在列表中(dataframe.columns)):“我收到了错误”类型为“int”的参数不适合”?@Rose我做了调整。如果仍然抛出错误,是否可以共享数据帧的短列表?或者至少有一个数据框被卡住了?如果我有你用来测试它的数据的话,那就更容易测试了。
for each in df_list:
    if 'A3' in each.loc[0]:
        df_list.remove(each)