Как объединить повторяющиеся столбцы, чтобы получить несколько строк вместо нескольких столбцов или разделенных запятыми данных в одну ячейку? - PullRequest
0 голосов
/ 21 июня 2019

Я собираю данные из среды javascript и хочу получить в качестве вывода набор столбцов с несколькими строками, заполненными значениями, которые я получаю из данных.Как соотнести найденное значение с предопределенным столбцом или как объединить столбцы с одним и тем же именем в данные из нескольких строк?

Данные, которые я собираю, являются базой данных решений Суда правосудия, которая является общедоступной.

Я исследовал, как объединять столбцы в Pandas DataFrame, но до сих пор лучшим выходом было объединение их и получение данных через запятую, что бесполезно для меня, стремясь к царапинам.

MWE:

from selenium import webdriver
from bs4 import BeautifulSoup
from openpyxl import Workbook
import numpy as np
import pandas as pd

url = "https://scon.stj.jus.br/SCON/legaplic/toc.jsp?materia=%27Lei+8.429%2F1992+%28Lei+DE+IMPROBIDADE+ADMINISTRATIVA%29%27.mat.&b=TEMA&p=true&t=&l=1&i=18&ordem=MAT,@NUM"

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get(url)

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/div[16]/a')
python_button.click()

driver.switch_to.window(driver.window_handles[-1])

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div[1]/div/div[3]/div[2]/div/div/div/div[3]/div[2]/span[2]/a')
python_button.click()

driver.switch_to.window(driver.window_handles[-1])

textList = driver.find_elements_by_class_name("docTexto")

resultados = BeautifulSoup(driver.page_source, 'lxml')

parse = resultados.find('div', {'id':'listadocumentos'})
paragrafoBRS = parse.find_all('div',{'class':'paragrafoBRS'})

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[2]')
python_button.click()

textList2 = driver.find_elements_by_class_name("docTexto")

resultados2 = BeautifulSoup(driver.page_source, 'lxml')

parse = resultados2.find('div', {'id':'listadocumentos'})
paragrafoBRS2 = parse.find_all('div',{'class':'paragrafoBRS'})

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()

textList3 = driver.find_elements_by_class_name("docTexto")

resultados3 = BeautifulSoup(driver.page_source, 'lxml')

parse = resultados3.find('div', {'id':'listadocumentos'})
paragrafoBRS3 = parse.find_all('div',{'class':'paragrafoBRS'})

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()

textList4 = driver.find_elements_by_class_name("docTexto")

resultados4 = BeautifulSoup(driver.page_source, 'lxml')

parse = resultados4.find('div', {'id':'listadocumentos'})
paragrafoBRS4 = parse.find_all('div',{'class':'paragrafoBRS'})

python_button = driver.find_element_by_xpath('/html/body/div[2]/div[6]/div/div/div[3]/div[2]/div/div/div/form/div/a[4]')
python_button.click()

textList5 = driver.find_elements_by_class_name("docTexto")

resultados5 = BeautifulSoup(driver.page_source, 'lxml')

parse = resultados5.find('div', {'id':'listadocumentos'})
paragrafoBRS5 = parse.find_all('div',{'class':'paragrafoBRS'})

header = []
content = []
for each in paragrafoBRS:
    header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
    content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())

for each in paragrafoBRS2:
    header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
    content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())

for each in paragrafoBRS3:
    header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
    content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())

for each in paragrafoBRS4:
    header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
    content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())

for each in paragrafoBRS5:
    header.append(each.find('h4', {'class':'docTitulo'}).text.strip())
    content.append(each.find(['div','pre'], {'class':'docTexto'}).text.strip())

    df = pd.DataFrame([content], columns = header)

df.to_excel('dados.xlsx')

driver.quit()

Я ожидаю очистить данные в Excel DataFrame, который имеет следующие столбцы:

  • Processo
  • Relator (a)
  • Julrgão Julgador
  • Data do Julgamento
  • Data da Publicação / Fonte
  • Ementa
  • Acórdão
  • Информация завершена àEmenta (ICE)
  • Referência Legislativa
  • Jurisprudência Citada
  • Acórdãos Similares

Каждая строка будет представлять документ из базы данных решений, полученный изjavascript environment.

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

Фактический вывод - это DataFrame Excel с 391 столбцом вместо 11 и 1 строкой данных, повторяющими столбцы более 41 раза.

Приведенный ниже код демонстрирует информацию, касающуюся документа 1, каквы можете видеть по h3 id "DOC1".

Я хочу, чтобы каждый DOC соответствовал строке.

Как вы также можете видеть, docTitulo соответствует имени столбца, а docTexto соответствует содержимомустрока.


Documento 1



Processo

AgInt no AREsp 739451 / RJ
AGRAVO INTERNO NO AGRAVO EM RECURSO ESPECIAL
2015/0161439-6 Relator(a) Ministro BENEDITO GONÇALVES (1142)
Grgão Julgador
T1 - PRIMEIRA TURMA
Данные делают Julgamento
26/02/2019
Data da Publicação / Fonte
DJe 26/03/2019
Эмента
PROCESSO  CIVIL.  AGRAVO  INTERNO  NO  AGRAVO  EM  RECURSO ESPECIAL.
VIOLAÇÃO  DO  ART. 535 DO CPC/1973. AUSÊNCIA DE ARGUMENTAÇÃO. SÚMULA
284/STF.  DEFICIÊNCIA  NA ARGUMENTAÇÃO RECURSAL.SÚMULA 284/STF. AÇÃO
CIVIL  PÚBLICA POR ATO DE IMPROBIDADE ADMINISTRATIVA. RECEBIMENTO DA
PETIÇÃO  INICIAL.  ANÁLISE  DO  ELEMENTO  SUBJETIVO.  NECESSIDADE DE
INSTRUÇÃO  PROCESSUAL.  PRESENÇA  DE  INDÍCIOS DE ATO DE IMPROBIDADE
ADMINISTRATIVA  EXPRESSAMENTE  RECONHECIDOS PELO TRIBUNAL DE ORIGEM.
REEXAME DE MATÉRIA FÁTICO PROBATÓRIA. IMPOSSIBILIDADE. SÚMULA 7/STJ.
1. O recurso não demonstra, com transparência e precisão, qual seria
o  ponto  omisso, contraditório ou obscuro do acórdão recorrido, não
se conhecendo da alegada violação do art. 535 do CPC/1973.
Incidência, por analogia, do entendimento da Súmula 284/STF.
2.  Aplica-se  a  Súmula 284/STF quanto à alegada violação dos arts.
9º,  10, 11 e 17, § 6º, da Lei nº 8.429/1992, tendo em vista que não
desenvolveu a parte agravante argumentos para demonstrar de que modo
tais dispositivos foram ofendidos.
3.  O  indeferimento da petição inicial da ação civil de improbidade
administrativa somente é cabível nos casos que o magistrado entender
inexistente  o  suposto ato de improbidade, da improcedência da ação
ou  a  inadequação da via eleita, hipóteses não configuradas no caso
concreto.
4.  Rever o entendimento do acórdão recorrido ensejaria o reexame do
conjunto fático-probatório da demanda, providência vedada em sede de
recurso especial, ante a Súmula 7/STJ.
5. Agravo interno não provido.
Acórdão
Vistos,  relatados  e discutidos os autos em que são partes as acima
indicadas,  acordam  os  Ministros  da  Primeira  Turma  do Superior
Tribunal  de Justiça prosseguindo o julgamento, por maioria, vencido
o Sr. Ministro Napoleão Nunes Maia Filho, negar provimento ao agravo
interno,  nos  termos do voto-vista do Sr. Ministro Relator. Os Srs.
Ministros  Sérgio  Kukina, Regina Helena Costa (Presidente) e Gurgel
de Faria votaram com o Sr. Ministro Relator.
Информационные материалы по Ementa (ICE)
     "A conclusão alcançada pela Corte a quo está em consonância com
a orientação deste Tribunal Superior sobre o tema, a qual autoriza o
recebimento   da  petição  inicial  da  ação  civil  de  improbidade
administrativa,  na  hipótese da presença de indícios de cometimento
de  atos  enquadrados  na  Lei  de  Improbidade  Administrativa. Com
efeito, na fase inicial prevista no art. 17 e §§ 7º, 8º e 9º, da Lei
nº  8.429/1992,  vigora o princípio do in dubio pro societate, a fim
de possibilitar o maior resguardo do interesse público".
     "[...],  deve  ser considerada prematura a extinção do processo
com  julgamento  de  mérito,  tendo em vista não existirem elementos
fáticos ou probatório suficientes para um juízo conclusivo acerca da
demanda, tampouco quanto a efetiva presença do elemento subjetivo do
suposto ato de improbidade administrativa, o qual exige, em regra, a
regular instrução processual".
     (VOTO VENCIDO) (MIN. NAPOLEÃO NUNES MAIA FILHO)
     "Verdadeiramente, é preciso que o libelo acusatório, assim como
as  decisões  judiciais  que  venham  a permitir o trâmite das ações
sancionadoras,  apontem com precisão os indícios mínimos da autoria,
cumplicidade,  participação,  ainda  que de somenos importância. Daí
porque   a   expressão   in  dubio  pro  societate,  cuja  origem  é
desconhecida,  deveria  ser  banida  das decisões que tratam da fase
inaugural  das  ações  de  improbidade, por nada dizer a respeito da
potencial autoria do fato que se repute ímprobo".
Referência Legislativa
LEG:FED LEILEI ORDINÁRIA:005869 ANO:1973
***** CPC-73 CÓDIGO DE PROCESSO CIVIL DE 1973
ART:00535

LEG:FED SUMSÚMULA:****** ANO:****
***** SUM(STF) SÚMULA DO SUPREMO TRIBUNAL FEDERAL
SUM:000284

LEG:FED LEI:008429 ANO:1992
***** LIA-92 LEI DE IMPROBIDADE ADMINISTRATIVA
ART:00009 ART:00010 ART:00011 ART:00017 PAR:00006
PAR:00007 PAR:00008 PAR:00009

LEG:FED SUMSÚMULA:****** ANO:****
***** SUM(STJ) SÚMULA DO SUPERIOR TRIBUNAL DE JUSTIÇA
SUM:000007
Jurisprudência Citada
(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA -
INDEFERIMENTO DA PETIÇÃO INICIAL - HIPÓTESES)
STJ - AgInt no AREsp 910840-RN, REsp 1192758-MG
(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA - PREMATURA
EXTINÇÃO DO PROCESSO COM JULGAMENTO DE MÉRITO - NECESSIDADE DA
INSTRUÇÃO PROCESSUAL)
STJ - AgInt nos EDcl no AREsp 925670-MG,
AgRg no AREsp 400779-ES
(PROCESSUAL CIVIL - AÇÃO DE IMPROBIDADE ADMINISTRATIVA - PRESENÇA DE
INDÍCIOS DE PRÁTICA DE ATO DE IMPROBIDADE - REEXAME DE PROVA)
STJ - AgRg no AREsp 706071-SP, AgRg no REsp 1281089-MG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...