Удаление DataFrame из списка DataFrame в зависимости от DataFrame - python? - PullRequest
1 голос
/ 11 апреля 2019

У меня есть список DataFrames, и я хочу удалить DataFrames из списка, которые удовлетворяют любому из следующих условий:

  • Если DataFrame имеет 2 или менее столбцов.
  • Если DataFrame где-либо содержит строку 'A3'.

Код, который я пробовал для длины столбца, показан ниже, здесь список называется df_list:

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

или

df_list = [i for i in df_list if not (i.shape[1] == 2)]

Код, который я пытался удалить, кадры данных со строкой «A3» в любом месте:

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

Я знаю, что мои номера неверны, но никто не удаляет что-либо из моего списка, когда они должны, кто-нибудь знает способ правильно это сделать?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Это то, что вы ищете?

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] 
0 голосов
/ 11 апреля 2019

Это проверит «A3» в именах столбцов. Затем вы можете использовать тот же формат для проверки значений столбцов.

for each in df_list:
    if 'A3' in each.loc[0]:
        df_list.remove(each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...