Как удалить столбцы в фрейме данных panda с пустыми заголовками и без значений - PullRequest
1 голос
/ 05 марта 2020

Я нашел способ удаления столбцов на основе указанных заголовков c и т. Д., Но не могу понять, как удалить все пустые столбцы в таблице одновременно.

Я очищаю таблицу, которая имеет 10 столбцов. У восьми из этих столбцов есть заголовки, а у двух, у которых нет заголовков, также нет значений внутри столбцов. Я хочу найти простой способ удалить все столбцы, которые имеют пустой заголовок и пустые значения внутри. Я не могу видеть столбцы, но когда я смотрю на форму информационного кадра, вы видите, что у него есть два дополнительных пустых столбца.

https://www.espncricinfo.com/series/8634/scorecard/1173069/australia-women-vs-south-africa-women-2nd-semi-final-icc-womens-t20-world-cup-2019-20

Это это страница, которую я пытаюсь почистить, используя красивый суп. Не могу поделиться кодом в данный момент, так как у меня нет доступа к моему рабочему компьютеру, но если вы посмотрите на таблицу с data-реагирующим = "294" и заголовками "BOWLING", "O", "M", и др c. Вы можете видеть в коде, который имеет два пустых текста заголовка. Мой panda dataframe выглядит идентично этой таблице, но его форма 5x10, потому что в нем есть два пустых нежелательных столбца. Надеюсь, это поможет, но если нет, я смогу вставить код, когда вернусь к работе, но, по сути, фрейм данных выглядит идентично таблице с столбцом индекса.

import requests
from bs4 import BeautifulSoup
import pandas as pd

def url_scraper(url):
    response=requests.get(url)
    html=response.text
    soup=BeautifulSoup(html,"html.parser")
    return soup

def first_inns_bowling_scorecard_scraper(url):
    soup=url_scraper(url)
    for divs in soup.find_all("div",{"id":"gp-inning-00"}):
        for bowling_div in soup.find_all("div",{"class":"scorecard-section bowling"}):
            table_headers=bowling_div.find_all("th")
            table_rows=bowling_div.find_all("tr")[1:]
    headers=[]
    for th in table_headers:
        headers.append(th.text)

    data = []
    for tr in table_rows:
        td = tr.find_all('td')
        row = [tr.text for tr in td]
        data.append(row)
    df=pd.DataFrame(data, columns=headers)
    df.dropna(axis=1, how='all', inplace=True)
    return df.shape

1 Ответ

1 голос
/ 05 марта 2020

Если все ячейки столбцов содержат NaN, вы можете использовать:

df.dropna(axis=1, how='all', inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...