count, print out and delete rows that do not contain a digit - pandas

Please see the following minimal reproducible example.
{'URL': {68020: 'URL', 68021: 'https://www.funda.nl/koop/verkocht/vlijmen/huis-42544400-oranjelaan-55/'}, 'OfferedSince': {68020: 'OfferedSince', 68021: '20 december 2021'}, 'DateOfSale': {68020: 'DateOfSale', 68021: '22 december 2021'}, 'AskingPrice': {68020: 'AsingPrice', 68021: '269000 '}, 'Description': {68020: 'Description', 68021: 'Interessante royale woning, uitgebouwd op de begane grond, deels verbouwd en gemoderniseerd. Voorzien van een riante woonkamer met airconditioning, moderne halfopen keuken met inbouwapparatuur. De woning heeft in 2021 een nieuw dak gekregen en is voorzien van een twaalftal zonnepanelen. Op een aantal punten dient de woning nog te worden aangepast/afgerond maar dat is grotendeels al gereed. Centrale ligging nabij alle benodigde faciliteiten zoals winkels, scholen, busverbinding en goede aansluiting met de A59 waardoor steden als ’s-Hertogenbosch, Waalwijk en Tilburg goed bereikbaar zijn. Tevens liggen de Loonse- en Drunense Duinen en vestingstad Heusden op een steenworp afstand. Indeling Begane grond Entree/Hal Entree aan de voorzijde van de woning. Je komt binnen in de hal welke is voorzien van de meterkast (groepenkast 2021, glasvezel, aansluiting voor inductie koken aanwezig), de omvormer van de 12 zonnepanelen, toegang naar de multifunctionele ruimte met bijkeuken en de trapopgang naar de eerste verdieping. Multifunctionele ruimte / bijkeuken. Van oorsprong is de woning van het type drive-in, dat wil zeggen dat er oorspronkelijk een garage op de begane grond is gelegen. In de loop van de jaren is er een pui geplaatst op de plek van de garagedeur waardoor er nu een multifunctionele ruimte is ontstaan. Ideaal voor kantoor aan huis. Er is op de begane grond een extra toilet geplaatst. In de multifunctionele ruimte is de van oorsprong gelegen smeerput nog gelegen, deze is momenteel dichtgezet. Aan de achterzijde is de opstelplaats van wasmachine en droger. De multifunctionele ruimte is niet volledig afgebouwd en behoeft nog de nodige werkzaamheden om het af te ronden. Separaat is de bijkeuken gelegen met een volledig keukenblok voorzien van wasbak en gaskookplaat. In de tussenruimte is een extra kast voorzien van koel-vriescombinatie. Op deze verdieping is tevens de CV ketel geplaatst (Intergas 2012). Dit betreft een CV ketel die geleased is inclusief onderhoudscontract. Vanuit de multifunctionele ruimte bereik je de achtertuin. Eerste verdieping Via de trap bereik je de eerste verdieping en kom je op de overloop waar zich het toilet en een extra kast bevinden. Hier is te trap naar de tweede verdieping en de toegang naar de woonkamer. Woonkamer en keuken Bij binnenkomst in de woonkamer valt meteen de hoeveelheid lichtinval op. Het is een ruime en erg lichte ruimte. Voorzien van een fraaie massief houtenvloer. Aan de achterzijde is de eetruimte welke aaneengesloten is aan de ruime keuken. Hier is de airconditioning geplaatst welke de volledige verdieping in warme dagen koel houdt. De keuken is voorzien van een combi-stoomoven, koel-vriescombinatie, een 4-pits gaskookplaat en RVS afzuigkap, vaatwasser en spoelbak. Tevens is er veel kast- en opbergruimte. Het bouwjaar van de keuken dateert van 2012. In de keuken is een tegelvloer gelegen. Tweede verdieping Via een vaste trap is de tweede verdieping bereikbaar. Hier bevinden zich 3 slaapkamers en de badkamer. De eerste slaapkamer is aan de voorzijde gelegen. Deze kamer is voorzien van een airconditioning en een fraaie laminaatvloer. Slaapkamer twee ligt aan de achterzijde en is nog af te ronden, de huidige eigenaren hebben deze kamer momenteel niet in gebruik. De derde slaapkamer is ook aan de achterzijde gelegen en is, net als de overloop en eerste slaapkamer, voorzien van een fraaie laminaatvloer. Op de overloop komt daglicht via de lichtkoepel. Het plafond dient nog afgerond te worden. Het plattedak van het hoofdgebouw dateert van 2021 evenals de 12 zonnepanelen. Badkamer De badkamer is modern en deels betegeld, deels gestuukt en voorzien van een inloopdouche met glazen wanden, een wandcloset en een wastafel. Exterieur Achtertuin Vanuit de multifunctionele ruimte is de achtertuin bereikbaar. De tuin is ruim van opzet en dient nog aangelegd te worden. Oprit Aan de voorzijde van de woning is een oprit waar 2 auto’s geparkeerd kunnen worden aanwezig. Bijzonderheden * Volledig nieuw dak op het hoofdhuis (2021) voorzien van 12 zonnepanelen (2021) * Mooie riante moderne woonkeuken (2012) * Ruime en lichte woonkamer * 3 slaapkamers en moderne badkamer * Oprit voor 2 auto’s * Multifunctionele ruimte op de begane grond * Mooie ligging tegenover een speelparkje * De woning dient op een aantal punten nog afgebouwd/afgerond te worden'}, 'Postcode': {68020: 'Postcode', 68021: '5251 JK'}, 'LivingArea': {68020: 'LivingArea', 68021: '158 '}, 'PlotArea': {68020: 'PlotArea', 68021: '196 '}, 'Rooms': {68020: 'Rooms', 68021: '6'}, 'Bedrooms': {68020: 'Bedrooms', 68021: '3'}, 'Bathrooms': {68020: 'Bathrooms', 68021: '1'}, 'EnergyLabel': {68020: 'EnergyLabel', 68021: 'A'}, 'BuildYear': {68020: 'BuildYear', 68021: '1969'}, 'TypeOfHouse': {68020: 'TypeOfHouse', 68021: 'Eengezinswoning, tussenwoning (drive-in woning)'}, 'Garden': {68020: 'Garden', 68021: 'Achtertuin en voortuin'}, 'Garden-yes-no': {68020: 'Garden-yes-no', 68021: 'Yes'}}
I would like to print out all the rows that do not contain a digit in the 'AskingPrice' column.
In the above reproducible example, this would be the row 68020. What is the most efficient way to select a row that does not contain a digit?
Thanks in advance.

You could try this:
import pandas as pd
df = pd.pd.DataFrame(dict_you_provided)
print(df[df["AskingPrice"].astype(str).str.contains(pat="[a-zA-Z]", regex=True)])
# Output
URL OfferedSince DateOfSale AskingPrice ... BuildYear TypeOfHouse Garden Garden-yes-no
68020 URL OfferedSince DateOfSale AsingPrice ... BuildYear TypeOfHouse Garden Garden-yes-no

Related

Querying certain values inside a RECORD type

I'm trying to extract certain values from google patents: https://console.cloud.google.com/marketplace/product/google_patents_public_datasets/google-patents-public-data?project=pivotal-life-sciences
and the datatype of the cpc (The Cooperative Patent Classification codes) classification inside table patents-public-data.patents.publications is RECORD
If I only wanted to pull records where at least 1 of the codes is like "C01%" how would I do that?
what I'm trying right now is:
SELECT inventor, assignee, cpc, title_localized, abstract_localized, claims_localized, description_localized, filing_date
FROM patents-public-data.patents.publications
WHERE filing_date >= 20200101 and cpc.code like 'C01%'
LIMIT 2
but this returns the error:
google.api_core.exceptions.BadRequest: 400 Cannot access field code on a value with type ARRAY<STRUCT<code STRING, inventive BOOL, first BOOL, ...>> at [4:43]
I understand that this means that I'm having bad syntax on my attempt to sort the cpc statement, but I don't know what the right records are.
if it helps, here is the result from the query:
SELECT inventor, assignee, cpc, title_localized, abstract_localized, claims_localized, description_localized, filing_date
FROM patents-public-data.patents.publications
WHERE filing_date >= 20200101
LIMIT 2
output:
Row((['MEIJER, JAN', 'STAACKE, Robert', 'BURCHARD, BERND', 'MEIJER, Nils'], ['Jan Meijer', 'Staacke Robert', 'Bernd Burchard'], [{'code': 'C01B32/26', 'inventive': True, 'first': False, 'tree': []}, {'code': 'G01R33/032', 'inventive': True, 'first': True, 'tree': []}, {'code': 'G01N24/006', 'inventive': False, 'first': False, 'tree': []}, {'code': 'G01R33/26', 'inventive': False, 'first': False, 'tree': []}, {'code': 'C01B32/28', 'inventive': True, 'first': False, 'tree': []}], [{'text': 'Nv-zentrum basierender mikrowellenfreier quantensensor und dessen anwendungen und ausprägungen', 'language': 'de', 'truncated': False}, {'text': 'Nv-centre-based microwave-free quantum sensor and uses and characteristics thereof', 'language': 'en', 'truncated': False}, {'text': 'Capteur quantique sans micro-ondes fondé sur un centre nv et applications et formes dudit capteur', 'language': 'fr', 'truncated': False}], [{'text': 'Die Erfindung betrifft ein Sensorsystem auf Basis von Diamanten mit einer hohen Dichte an NV-Zentren. Die Beschreibung umfasst a) Methoden zur Herstellung der notwendigen Diamanten hoher NV-Zentrendichte, b) Merkmale solcher Diamanten, c) Sensorelemente für die Nutzung der Fluoreszenzstrahlung der solcher Diamanten, d) Sensorelemente für die Nutzung des Fotostromes solcher Diamanten, e) Systeme zur Auswertung dieser Größen, f) Systeme mit verringertem Rauschen zur Auswertung dieser Systeme, g) Gehäuse zur Verwendung solcher Systeme in automatischen Bestückungsanlagen, g) Verfahren zum Test diese Systeme und h) ein Musikinstrument als Beispiel einer letztendlichen Anwendung all dieser Vorrichtungen und Verfahren.', 'language': 'de', 'truncated': False}, {'text': 'Die Erfindung betrifft ein Sensorsystem auf Basis von Diamanten mit einer hohen Dichte an NV-Zentren. Die Beschreibung umfasst a) Methoden zur Herstellung der notwendigen Diamanten hoher NV-Zentrendichte, b) Merkmale solcher Diamanten, c) Sensorelemente für die Nutzung der Fluoreszenzstrahlung der solcher Diamanten, d) Sensorelemente für die Nutzung des Fotostromes solcher Diamanten, e) Systeme zur Auswertung dieser Größen, f) Systeme mit verringertem Rauschen zur Auswertung dieser Systeme, g) Gehäuse zur Verwendung solcher Systeme in automatischen Bestückungsanlagen, g) Verfahren zum Test diese Systeme und h) ein Musikinstrument als Beispiel einer letztendlichen Anwendung all dieser Vorrichtungen und Verfahren.', 'language': 'de', 'truncated': False}, {'text': 'The invention relates to a sensor system on the basis of diamonds with a high density of NV centres. The description comprises a) methods for producing the necessary diamonds with high NV centre density, b) features of such diamonds, c) sensor elements for the use of the fluorescence radiation of such diamonds, d) sensor elements for the use of the photocurrent of such diamonds, e) systems for evaluating these variables, f) systems with reduced noise for evaluating these systems, g) housing for the use of such systems in automatic placement systems, g) method for testing these systems, and h) a musical instrument as an example of a final use of all of these devices and methods.', 'language': 'en', 'truncated': False}, {'text': 'The invention relates to a sensor system on the basis of diamonds with a high density of NV centres. The description comprises a) methods for producing the necessary diamonds with high NV centre density, b) features of such diamonds, c) sensor elements for the use of the fluorescence radiation of such diamonds, d) sensor elements for the use of the photocurrent of such diamonds, e) systems for evaluating these variables, f) systems with reduced noise for evaluating these systems, g) housing for the use of such systems in automatic placement systems, g) method for testing these systems, and h) a musical instrument as an example of a final use of all of these devices and methods.', 'language': 'en', 'truncated': False}, {'text': 'L'invention concerne un système capteur à base de diamants dont la densité en centres NV est élevée. La description comprend a)\u202fdes méthodes de production des diamants nécessaires dont la densité des centres NV est élevée, b)\u202fles caractéristiques de tels diamants, c)\u202fdes éléments capteurs pour l'exploitation du rayonnement fluorescent de tels diamants, d)\u202fdes éléments capteurs pour l'exploitation du photocourant de tels diamants, e)\u202fdes systèmes d'évaluation de ces grandeurs, f)\u202fdes systèmes à bruit réduit pour l'évaluation de ces systèmes, g)\u202fun carter permettant d'utiliser de tels systèmes dans des installations de montage automatique, g) un procédé pour tester ces systèmes, et h) un instrument de musique comme exemple d'une application finale de tous ces dispositifs et du procédé.', 'language': 'fr', 'truncated': False}, {'text': 'L'invention concerne un système capteur à base de diamants dont la densité en centres NV est élevée. La description comprend a)\u202fdes méthodes de production des diamants nécessaires dont la densité des centres NV est élevée, b)\u202fles caractéristiques de tels diamants, c)\u202fdes éléments capteurs pour l'exploitation du rayonnement fluorescent de tels diamants, d)\u202fdes éléments capteurs pour l'exploitation du photocourant de tels diamants, e)\u202fdes systèmes d'évaluation de ces grandeurs, f)\u202fdes systèmes à bruit réduit pour l'évaluation de ces systèmes, g)\u202fun carter permettant d'utiliser de tels systèmes dans des installations de montage automatique, g) un procédé pour tester ces systèmes, et h) un instrument de musique comme exemple d'une application finale de tous ces dispositifs et du procédé.', 'language': 'fr', 'truncated': False}], [], [], 20200722), {'inventor': 0, 'assignee': 1, 'cpc': 2, 'title_localized': 3, 'abstract_localized': 4, 'claims_localized': 5, 'description_localized': 6, 'filing_date': 7})
so TL;DR how do I sort through RECORD objects in sql with the LIKE operator?
OpenAI's GPT-3 gave me the answer. Damn language models taking over StackOverflow jobs...
Looks like its:
SELECT inventor, assignee, cpc, title_localized, abstract_localized, claims_localized, description_localized, filing_date
FROM `patents-public-data.patents.publications`
WHERE filing_date >= 20200101 and
(SELECT count(*)
FROM UNNEST(cpc) c
WHERE c.code LIKE 'C01%'
) > 0
LIMIT 2
If anyone is curious I just copied that stack qustion into the playground and this was the raw output:
A:
I think you want to unnest the cpc column:
<code>SELECT inventor, assignee, cpc, title_localized, abstract_localized, claims_localized, description_localized, filing_date
FROM patents-public-data.patents.publications
WHERE filing_date >= 20200101 and
(SELECT count(*)
FROM UNNEST(cpc) c
WHERE c.code LIKE 'C01%'
) > 0
LIMIT 2;
</code>
Another option
SELECT inventor, assignee, cpc, title_localized, abstract_localized, claims_localized, description_localized, filing_date
FROM `patents-public-data.patents.publications` t
WHERE filing_date >= 20200101 and
EXISTS (SELECT 1 FROM t.cpc WHERE code LIKE 'C01%')
LIMIT 2

REGEXP_SUBSTR Oracle | Extract a string between two delimiters

Im trying to extract a name from a column that return a big clob like this one:
{
"idStatus":6,
"atrasoSLA":0.0,
"atrasoSLAStr":"00:00",
"baseReports":false,
"idItemTrabalho":10019,
"portfolio":"Segurança",
"servicoRelacionado":"ATIVOS (SEGURANÇA)",
"idStatusControleSla":8,
"dataFinalUltimoControleSla":"Sep 3, 2018 11:55:12 AM",
"grupoExecutor":"Segurança",
"idGrupoExecutor":71,
"contrato":"Central de Serviços - SEFAZ-MA",
"dataHoraCaptura":"Sep 3, 2018 11:42:32 AM",
"dataHoraFim":"Sep 3, 2018 11:55:12 AM",
"dataHoraInicio":"Sep 3, 2018 11:42:19 AM",
"dataHoraInicioSLA":"Sep 3, 2018 11:42:19 AM",
"dataHoraInicioSLAStr":"09/03/2018 11:42 AM",
"dataHoraLimite":"Sep 4, 2018 7:42:00 AM",
"dataHoraLimiteStr":"09/04/2018 07:42 AM",
"dataHoraSolicitacao":"Sep 3, 2018 11:42:19 AM",
"dataHoraSolicitacaoStr":"09/03/2018 11:42 AM",
"demanda":"Requisição",
"descricao":"\u003cp\u003eRafael reportou que o CITSMART homologa\u0026ccedil;\u0026atilde;o\u0026nbsp;esta\u0026nbsp;offline.\u0026nbsp;\u003c/p\u003e\n",
"descricaoSemFormatacao":"Rafael reportou que o CITSMART homologação esta offline. ",
"descrSituacao":"citcorpore.comum.fechada",
"detalhamentoCausa":"\u003cp\u003eO incidente foi causado devido o servidor de aplica\u0026ccedil;\u0026otilde;es do CITSMART estar em DHCP, com isso o IP 10.1.1.247 foi alterado para outro IP causando a falha na comunica\u0026ccedil;\u0026atilde;o com o APACHE.\u003c/p\u003e\n",
"emailcontato":"rafael.feitosa#sefaz.ma.gov.br",
"emailResponsavel":"nilson#sefaz.ma.gov.br",
"enviaEmailAcoes":"S",
"enviaEmailCriacao":"S",
"enviaEmailFinalizacao":"S",
"faseAtual":"Execução",
"grupoNivel1":"SDNIVEL1",
"idAcordoNivelServico":8,
"idCalendario":2,
"idContatoSolicitacaoServico":1844,
"idContrato":2,
"idFaseAtual":2,
"idOrigem":1,
"idPrioridade":5,
"idServico":70,
"idServicoContrato":61,
"idSolicitacaoServico":1559,
"idSolicitante":2220,
"idTipoDemandaServico":1,
"idUnidade":104,
"idTarefaEncerramento":10019,
"impacto":"B",
"nomecontato":"Rafael Brito Feitosa",
"nomeServico":"ATIVOS (SEGURANÇA) - Análise LOGs/Desempenho/Capacidade/Disponibilidade",
"nomeTarefa":"Atender solicitacao",
"nomeUnidadeResponsavel":"COTEC",
"observacao":" ",
"origem":"Central de Serviços",
"prazoCapturaHH":0,
"prazoCapturaMM":0,
"prazoHH":8,
"prazoMM":0,
"prioridade":"5",
"responsavel":"Nilson Roniery da Silva Vieira (COTEC)",
"resposta":"\u003cp\u003ePara solucionar este foi inserido um IP fixo da DMZ EXTERNA e mais o seguintes passos:\u003c/p\u003e\n\n\u003col\u003e\n\t\u003cli\u003eAdicionado IP fixo na m\u0026aacute;quina, sendo ele: 172.20.1.55;\u003c/li\u003e\n\t\u003cli\u003eForam criadas regras no Firewall:\n\t\u003cul\u003e\n\t\t\u003cli\u003e172.20.1.55 --\u0026gt; 10.1.1.56 (BD) porta 1521\u003c/li\u003e\n\t\t\u003cli\u003e172.20.1.55 -\u0026gt;\u0026gt;\u0026nbsp; INTERNET portas 80 e 443\u003c/li\u003e\n\t\t\u003cli\u003eVPN CIT --\u0026gt;\u0026nbsp;172.20.1.55\u003c/li\u003e\n\t\u003c/ul\u003e\n\t\u003c/li\u003e\n\t\u003cli\u003eForam alterados os proxies no apache conforme imagem abaixo\u003cimg src\u003d\"/citsmart/galeriaImagens/1/2/439.png\" style\u003d\"height:105px; width:884px\" /\u003e\u003c/li\u003e\n\t\u003cli\u003eFoi restartado o servi\u0026ccedil;o do citsmart no AS.\u0026nbsp;\n\t\u003cul\u003e\n\t\t\u003cli\u003e\u003cem\u003e#\u0026nbsp;/etc/init.d/citsmart_itsm stop\u003c/em\u003e\u003c/li\u003e\n\t\t\u003cli\u003e\u003cem\u003e# /etc/init.d/citsmart_itsm start\u003c/em\u003e\u003c/li\u003e\n\t\u003c/ul\u003e\n\t\u003c/li\u003e\n\u003c/ol\u003e\n",
"seqReabertura":0,
"servico":"ATIVOS (SEGURANÇA) - Análise LOGs/Desempenho/Capacidade/Disponibilidade",
"situacaoSLA":"A",
"slaACombinar":"N",
"solicitante":"Rafael Brito Feitosa",
"solicitanteUnidade":"Rafael Brito Feitosa",
"solucaoTemporaria":"N",
"telefonecontato":"Não disponível.",
"tempoAtendimentoHH":0,
"tempoAtendimentoMM":12,
"tempoAtrasoHH":0,
"tempoAtrasoMM":0,
"tempoCapturaHH":0,
"tempoCapturaMM":0,
"tempoCapturaSS":13,
"tempoDecorridoHH":0,
"tempoDecorridoMM":0,
"urgencia":"B",
"ordernacao":0,
"usuarioDto":{
"idUsuario":635,
"idEmpregado":635,
"idPerfilAcessoUsuario":6,
"idEmpresa":1,
"login":"sefaz.ma.gov.br\\034013",
"nomeUsuario":"Nilson Roniery da Silva Vieira",
"senha":"f04534e4998415904454ae1ceb2040fa05bf548e",
"status":"A",
"ldap":"S",
"email":"nilson#sefaz.ma.gov.br",
"ldapGroupId":1,
"fromToken":false
},
"idResponsavel":635,
"idGrupoAtual":71,
"idGrupoNivel1":2,
"idTarefa":10019,
"grupoAtual":"Segurança"
}
In this case the name i want is "Nilson Roniery da Silva"
And the only thing i know is that the names always come after the "nomeUsuario":" and at the end have a "
so, how can i make a select that only brings me the name between "nomeUsuario":" and "
You should be able to use json_value to parse this clob:
SELECT JSON_VALUE(mycolumn, '$.usuarioDto.nomeUsuario') FROM mytable

Fetch product category matching the product ID

I have created a keywords.csv file in my resource folder in order to automatically fetch the data from all the products listed in there. This works perfectly. The first column of the .csv-file is named "keywords". The keywords are based on a unique number representing the product category (i.e., high pressure washer, floor cleaner, ...). I am using this number to adjust the API URL where I am fetching all the data from.
I would like to print out the product category. Because there is no product category defined in the API where I am fetching the data from, I would like to print out the second column of my .csv-file, being "keywordtype". The "keywordtype" should be printed to the products with the same "keyword".
Secondly, I've been googling around but couldn't find a solution for replacing multiple characters in one string. Is there a way of making some sort of dictionairy so that "\u00e9" gets replaced with "é", "\u00b2" with "²", etc. I tried using .replace('text','') and .split(), but for multiple characters this isn't sufficient.
What I tried
I tried calling the "keywordtype" in the def parse(self, response):, but I don't know how to make it check which keyword is being used. Therefore it keeps printing the same "keywordtype" over and over again.
...
def parse(self, response):
#Calling the "category" from the keywords.csv file -- THIS IS NOT WORKING
with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
for keyword in csv.DictReader(search_keywords):
category=keyword["keywordtype"]
...
FULL CODE #1
Spider.py
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:44:35 2019
#author: bergs
"""
# -*- coding: utf-8 -*-
import scrapy
from krc.items import KrcItem
import json
import os
import csv
import time
import datetime
class KRCSpider(scrapy.Spider):
name = "krc_spider"
allowed_domains = ["kaercher.com"]
start_urls = ['https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page=1&size=8&isocode=nl-NL']
def start_requests(self):
"""Read keywords from keywords file amd construct the search URL"""
with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
for keyword in csv.DictReader(search_keywords):
search_text=keyword["keyword"]
category = keyword["keywordtype"]
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
search_text)
# The meta is used to send our search text into the parser as metadata
yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text, "category": category})
def parse(self, response):
category = response.meta["category"]
current_page = response.meta.get("page", 1)
next_page = current_page + 1
#Printing the timestamp when fetching the data, using default timezone from the requesting machine
ts = time.time()
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d-%m-%Y %H:%M:%S')
#Defining the items
item = KrcItem()
data = json.loads(response.text)
for company in data.get('products', []):
item["productid"] = company["id"]
item["category"] = category
item["name"] = company["name"]
item["description"] = company["description"]
item["price"] = company["priceFormatted"].replace("\u20ac","").strip()
item["timestamp"] = timestamp
yield item
#Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
if data["isTruncated"]:
yield scrapy.Request(
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
callback=self.parse,
meta={'page': next_page},
)
FULL CODE #2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 22:44:35 2019
#author: bergs
"""
# -*- coding: utf-8 -*-
import scrapy
from krc.items import KrcItem
import json
import os
import csv
import time
import datetime
class KRCSpider(scrapy.Spider):
name = "krc_spider"
allowed_domains = ["kaercher.com"]
start_urls = ['https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page=1&size=8&isocode=nl-NL']
def start_requests(self):
"""Read keywords from keywords file amd construct the search URL"""
with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
for keyword in csv.DictReader(search_keywords):
search_text = keyword["keyword"]
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
search_text)
# The meta is used to send our search text into the parser as metadata
yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text})
def parse(self, response):
current_page = response.meta.get("page", 1)
next_page = current_page + 1
#Printing the timestamp when fetching the data, using default timezone from the requesting machine
ts = time.time()
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d-%m-%Y %H:%M:%S')
#Defining the items
item = KrcItem()
data = json.loads(response.text)
for company in data.get('products', []):
item["productid"] = company["id"]
item["category"] = company["url"].split('/')[-2].replace('-',' ')
item["name"] = company["name"]
item["description"] = company["description"]
item["price"] = company["priceFormatted"].replace("\u20ac","").strip()
item["timestamp"] = timestamp
yield item
#Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
if data["isTruncated"]:
yield scrapy.Request(
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
callback=self.parse,
meta={'page': next_page},
)
Keywords.csv
keyword,keywordtype
20035386,Hogedrukreiniger
20035424,Window Vacs
items.py
import scrapy
class KrcItem(scrapy.Item):
productid=scrapy.Field()
name=scrapy.Field()
description=scrapy.Field()
price=scrapy.Field()
producttype=scrapy.Field()
timestamp=scrapy.Field()
category=scrapy.Field()
pass
Results.json #1
[
{"productid": 10491477, "category": "Window Vacs", "name": "WV 6 + KV 4(wit)", "description": "De vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer accessoires maakt het vuil los - en de Window Vac WV 6 zuigt het achterblijvende water af.", "price": "169,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491478, "category": "Window Vacs", "name": "WV 6 + KV 4", "description": "Schone vensters in een handomdraai: met de vibrerende Window Vac KV 4 inclusief elektrische watervoorziening en vibratie maakt u het vuil eerst los en daarna zuigt u met de Window Vac WV 6 het vuile water af.", "price": "159,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491479, "category": "Window Vacs", "name": "WV 6 Plus (wit)", "description": "In een set met 2 wisdoeken voor binnen en buiten, sproeiflacon, reinigingsmiddel en vuilkrabber: de Window Vac WV 6 Premium met innovatieve zuigstrip is nog flexibeler in gebruik.", "price": "109,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491480, "category": "Window Vacs", "name": "WV 6 Plus", "description": "Met innovatieve striptechnologie en nog flexibeler in gebruik: de Window Vac WV 6 Plus voor streepvrij schone vensters in een mum van tijd.", "price": "99,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491481, "category": "Window Vacs", "name": "WV 2 + KV4 (wit)", "description": "Sterk duo voor streepvrij schone vensters: de vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer extra's, en de Window Vac WV 2.", "price": "139,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10491482, "category": "Window Vacs", "name": "WV 2 + KV 4", "description": "Voor moeiteloos ramen lappen: de vibrerende accu-wisser KV 4 inclusief elektrische watervoorziening en trilfunctie maakt het vuil los - en de Window Vac WV 2 zuigt het vuile water af.", "price": "129,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10475755, "category": "Window Vacs", "name": "KV 4 Premium", "description": "Inclusief tweede wisdoek: de Window Vac KV 4 met elektrische watervoorziening en ondersteunende trilfunctie maakt het vuil moeiteloos los van alle gladde oppervlakken.", "price": "89,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10475756, "category": "Window Vacs", "name": "KV 4", "description": "De vibrerende accu-wisser KV 4 maakt vuil moeiteloos los van gladde oppervlakken. Door het elektrisch aangebrachte water en de trillingen wordt handmatig schrobben overbodig.", "price": "79,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10461927, "category": "Hogedrukreiniger", "name": "K 7 Premium Full Control Plus Home", "description": "Inclusief slanghaspel en Home Kit: de K 7 Premium Full Control Plus Home. U kunt de juiste druk instellen met de +/- knoppen en de LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "699,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10453128, "category": "Hogedrukreiniger", "name": "K 7 Premium Full Control Plus", "description": "Inclusief slanghaspel: de K 7 Premium Full Control Plus. U kunt de juiste druk instellen met de +/- knoppen en het LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "639,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10461929, "category": "Hogedrukreiniger", "name": "K 7 Full Control Plus Home", "description": "De ideale hogedrukreiniger voor regelmatig gebruik op hardnekkig vuil. K 7 Full Control Plus Home met Home Kit en hogedrukpistool inclusief +/- knoppen voor drukregeling en LCD-scherm.", "price": "639,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10442692, "category": "Hogedrukreiniger", "name": "K 7 Full Control Plus", "description": "De K 7 Full Control Plus hogedrukreiniger van K\u00e4rcher inclusief hogedrukpistool met drukregeling en dosering van reinigingsmiddel met een druk op de knop, en een LCD-scherm waarop de druk wordt weergegeven.", "price": "579,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10462452, "category": "Hogedrukreiniger", "name": "K 5 Premium Full Control Plus Home", "description": "K 5 Premium Full Control Plus Home hogedrukreiniger met +/- knoppen voor drukregeling en LCD-scherm op het hogedrukpistool. Inclusief Home Kit, 3-in-1 Multi Jet spuitlans en slanghaspel.", "price": "499,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10442700, "category": "Hogedrukreiniger", "name": "K 5 Premium Full Control Plus", "description": "Voor regelmatig verwijderen van matige verontreiniging op auto's, stenen muren en fietsen. K 5 Premium Full Control Plus hogedrukreiniger inclusief hogedrukpistool met +/- knoppen voor drukregeling en LCD-scherm.", "price": "449,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10430946, "category": "Hogedrukreiniger", "name": "K 5 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Ideaal voor regelmatig gebruik op matige verontreiniging. Oppervlakteprestatie van 40 m\u00b2/u.", "price": "379,95", "timestamp": "18-08-2019 15:53:30"},
{"productid": 10441978, "category": "Hogedrukreiniger", "name": "K 4 Premium Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Inclusief slanghaspel en Home Kit. Ideaal voor een gemiddelde vervuilingsgraad. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "369,95", "timestamp": "18-08-2019 15:53:30"}
]
Results.json #2
[
{"productid": 10461927, "category": "hogedrukreinigers", "name": "K 7 Premium Full Control Plus Home", "description": "Inclusief slanghaspel en Home Kit: de K 7 Premium Full Control Plus Home. U kunt de juiste druk instellen met de +/- knoppen en de LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "699,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10453128, "category": "hogedrukreinigers", "name": "K 7 Premium Full Control Plus", "description": "Inclusief slanghaspel: de K 7 Premium Full Control Plus. U kunt de juiste druk instellen met de +/- knoppen en het LCD-scherm op het hogedrukpistool van de hogedrukreiniger.", "price": "639,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10461929, "category": "hogedrukreinigers", "name": "K 7 Full Control Plus Home", "description": "De ideale hogedrukreiniger voor regelmatig gebruik op hardnekkig vuil. K 7 Full Control Plus Home met Home Kit en hogedrukpistool inclusief +/- knoppen voor drukregeling en LCD-scherm.", "price": "639,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10442692, "category": "hogedrukreinigers", "name": "K 7 Full Control Plus", "description": "De K 7 Full Control Plus hogedrukreiniger van K\u00e4rcher inclusief hogedrukpistool met drukregeling en dosering van reinigingsmiddel met een druk op de knop, en een LCD-scherm waarop de druk wordt weergegeven.", "price": "579,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10462452, "category": "hogedrukreinigers", "name": "K 5 Premium Full Control Plus Home", "description": "K 5 Premium Full Control Plus Home hogedrukreiniger met +/- knoppen voor drukregeling en LCD-scherm op het hogedrukpistool. Inclusief Home Kit, 3-in-1 Multi Jet spuitlans en slanghaspel.", "price": "499,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10442700, "category": "hogedrukreinigers", "name": "K 5 Premium Full Control Plus", "description": "Voor regelmatig verwijderen van matige verontreiniging op auto's, stenen muren en fietsen. K 5 Premium Full Control Plus hogedrukreiniger inclusief hogedrukpistool met +/- knoppen voor drukregeling en LCD-scherm.", "price": "449,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430946, "category": "hogedrukreinigers", "name": "K 5 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Ideaal voor regelmatig gebruik op matige verontreiniging. Oppervlakteprestatie van 40 m\u00b2/u.", "price": "379,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10441978, "category": "hogedrukreinigers", "name": "K 4 Premium Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Inclusief slanghaspel en Home Kit. Ideaal voor een gemiddelde vervuilingsgraad. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "369,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491477, "category": "window vacs", "name": "WV 6 + KV 4(wit)", "description": "De vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer accessoires maakt het vuil los - en de Window Vac WV 6 zuigt het achterblijvende water af.", "price": "169,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491478, "category": "window vacs", "name": "WV 6 + KV 4", "description": "Schone vensters in een handomdraai: met de vibrerende Window Vac KV 4 inclusief elektrische watervoorziening en vibratie maakt u het vuil eerst los en daarna zuigt u met de Window Vac WV 6 het vuile water af.", "price": "159,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491479, "category": "window vacs", "name": "WV 6 Plus (wit)", "description": "In een set met 2 wisdoeken voor binnen en buiten, sproeiflacon, reinigingsmiddel en vuilkrabber: de Window Vac WV 6 Premium met innovatieve zuigstrip is nog flexibeler in gebruik.", "price": "109,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491480, "category": "window vacs", "name": "WV 6 Plus", "description": "Met innovatieve striptechnologie en nog flexibeler in gebruik: de Window Vac WV 6 Plus voor streepvrij schone vensters in een mum van tijd.", "price": "99,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491481, "category": "window vacs", "name": "WV 2 + KV4 (wit)", "description": "Sterk duo voor streepvrij schone vensters: de vibrerende accu-wisser KV 4 inclusief elektrische bevochtiging, vibratie, tweede wisdoek en meer extra's, en de Window Vac WV 2.", "price": "139,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10491482, "category": "window vacs", "name": "WV 2 + KV 4", "description": "Voor moeiteloos ramen lappen: de vibrerende accu-wisser KV 4 inclusief elektrische watervoorziening en trilfunctie maakt het vuil los - en de Window Vac WV 2 zuigt het vuile water af.", "price": "129,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10475755, "category": "window vacs", "name": "KV 4 Premium", "description": "Inclusief tweede wisdoek: de Window Vac KV 4 met elektrische watervoorziening en ondersteunende trilfunctie maakt het vuil moeiteloos los van alle gladde oppervlakken.", "price": "89,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10475756, "category": "window vacs", "name": "KV 4", "description": "De vibrerende accu-wisser KV 4 maakt vuil moeiteloos los van gladde oppervlakken. Door het elektrisch aangebrachte water en de trillingen wordt handmatig schrobben overbodig.", "price": "79,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430942, "category": "hogedrukreinigers", "name": "K 4 Premium Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool - voor de juiste druk op elk oppervlak. Inclusief slanghaspel. Ideaal voor matige verontreiniging. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "319,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10441943, "category": "hogedrukreinigers", "name": "K 4 Full Control Home", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Ideaal voor de incidentele reiniging van een gemiddelde vervuiling. Inclusief Home Kit. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "339,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10430938, "category": "hogedrukreinigers", "name": "K 4 Full Control", "description": "Hogedrukreiniger met drukindicator op het hogedrukpistool \u2013 voor de juiste druk op elk oppervlak. Ideaal voor de incidentele reiniging van een gemiddelde vervuiling. Oppervlakteprestatie van 30 m\u00b2/u.", "price": "289,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10501457, "category": "hogedrukreinigers", "name": "K 3 Full Control Home T150", "description": "Perfect schoon rondom huis dankzij de Home Kit inclusief oppervlaktereiniger en reinigingsmiddelen. Het pistool van de K 3 Full Control Home hogedrukreiniger geeft het drukniveau aan.", "price": "209,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10501459, "category": "hogedrukreinigers", "name": "K 3 Full Control", "description": "Ideale hogedrukreiniger voor incidenteel gebruik bij lichte vervuiling. De K 3 Full Control geeft de druk aan op het pistool. Zo kunt u voor elk oppervlak de juiste druk instellen.", "price": "179,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10406424, "category": "hogedrukreinigers", "name": "K 3 Home", "description": "De K 3 Home hogedrukreiniger met Home Kit is ideaal voor incidenteel gebruik en voor de verwijdering van lichte vervuiling op bijvoorbeeld fietsen, tuinhekken en motorfietsen.", "price": "219,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10461899, "category": "hogedrukreinigers", "name": "K 2 Premium Full Control Home", "description": "De K 2 Premium Full Control Home hogedrukreiniger van K\u00e4rcher inclusief Home Kit en met gerichte drukregeling. Ideaal voor oppervlakken rondom het huis en op lichtere vervuiling.", "price": "179,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10464555, "category": "hogedrukreinigers", "name": "K 2 HOME T150", "description": "De K 2 Home op wieltjes is speciaal ontworpen voor incidenteel gebruik en lichte vervuiling. Dankzij de Home Kit houdt u met de hogedrukreiniger ook grotere oppervlakken rondom het huis eenvoudig schoon.", "price": "129,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10479573, "category": "hogedrukreinigers", "name": "K 2 Basic", "description": "De 'K2 Basic' hogedrukreiniger is ideaal voor incidenteel gebruik en verwijdering van normale vervuiling rondom de woning (bijv. fietsen, tuingereedschap, tuinmeubilair).", "price": "79,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497774, "category": "hogedrukreinigers", "name": "K 7 Compact Home", "description": "Compact en handzaam: de hogedrukreiniger K 7 Compact met watergekoelde motor. Voor frequent gebruik en sterke vervuiling, bijvoorbeeld op straten, in zwembaden, op fietsen of grote auto's.", "price": "589,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497770, "category": "hogedrukreinigers", "name": "K 5 Compact Home", "description": "De K5 Compact Home met watergekoelde motor neemt weinig ruimte in en kan comfortabel worden vervoerd. Hogedrukreiniger inclusief Home Kit met oppervlaktereiniger T 350 en steen- en gevelreiniger.", "price": "379,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497773, "category": "hogedrukreinigers", "name": "K 5 Compact", "description": "Inclusief innovatieve slangopberging: de eenvoudig te vervoeren en op te bergen hogedrukreiniger K 5 Compact voor regelmatig gebruik bij middelzware vervuiling. Oppervlakteprestatie 40 m\u00b2/u.", "price": "329,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497765, "category": "hogedrukreinigers", "name": "K 4 Compact Home", "description": "Eenvoudig te vervoeren en snel op te bergen: de K 4 Compact voor incidenteel gebruik bij middelzware vervuiling. Inclusief telescoopgreep en watergekoelde motor. Oppervlakteprestatie 30 m\u00b2/u.", "price": "289,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10497768, "category": "hogedrukreinigers", "name": "K 4 Compact", "description": "Eenvoudig te vervoeren en snel op te bergen: de K 4 Compact voor incidenteel gebruik bij middelzware vervuiling. Inclusief telescoopgreep en watergekoelde motor. Oppervlakteprestatie 30 m\u00b2/u.", "price": "249,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10472949, "category": "hogedrukreinigers", "name": "K 2 Battery Set", "description": "Kan overal worden ingezet waar er geen stopcontact beschikbaar is: De K2 hogedrukreiniger met accuaandrijving, inclusief 36 V li-ionaccu en oplader. Ideaal voor uiteenlopende toepassingen.", "price": "399,95", "timestamp": "18-08-2019 16:43:57"},
{"productid": 10472950, "category": "hogedrukreinigers", "name": "K 2 Battery", "description": "De hogedrukreiniger met accuaandrijving voor flexibel schoonmaken zonder stopcontact. Ideaal voor uiteenlopende toepassingen rondom het huis. Accu en oplader worden niet meegeleverd.", "price": "199,95", "timestamp": "18-08-2019 16:43:58"}
]
You need to yield category from CSV file to the parse using request.meta:
def start_requests(self):
"""Read keywords from keywords file amd construct the search URL"""
with open(os.path.join(os.path.dirname(__file__), "../resources/keywords.csv")) as search_keywords:
for keyword in csv.DictReader(search_keywords):
search_text=keyword["keyword"]
category = keyword["keywordtype"]
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/{0}?page=1&size=8&isocode=nl-NL".format(
search_text)
# The meta is used to send our search text into the parser as metadata
yield scrapy.Request(url, callback = self.parse, meta = {"search_text": search_text, "category": category})
def parse(self, response):
category = response.meta["category"]
...
UPDATE
If you want to have your category on next page you need to use .meta again:
#Checking whether "isTruncated" is true (boolean), if so, next page will be triggered
if data["isTruncated"]:
yield scrapy.Request(
url="https://www.kaercher.com/api/v1/products/search/shoppableproducts/partial/20035386?page={page}&size=8&isocode=nl-NL".format(page=next_page),
callback=self.parse,
meta={'page': next_page, "category": category},
)

How to get a specific column from a data frame?

I am working with a data frame, that has three columns: comment_id, class and comment_message, I need to store the three columns, but I am getting an error when I try to store the column called: class, my complete code looks as follows:
from sklearn import svm
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
df1=pd.read_csv("C:/Users/acamagon/Downloads/dataSet",sep=',')
#print(df1)
comment_id = df1['comment_id']
comment_message = df1['comment_message']
print(comment_message)
here is whe the problem comes:
#Here is the problem
classification = df1['class']
the file looks as follows:
comment_id,comment_message,class
10154395643583692_10154397346673692,quisiera saber el precio y las caracteristicas del selulae samsung s5 xfavoor,1
10154395643583692_10154397434578692,"buenos dias, necesito que le den seguimiento a un telefono que deje en garantia desde octubre en el cac urban center de xalapa, veracruz. ya van 4 veces y me dicen que el telefono no esta y ya va para 3 meses que lo deje. espero me den una respuesta pronto. me comunico al *111 y solo me dicen que el folio sigue en pendiente.",1
10154395643583692_10154397511368692,no sirve su aplicacion de mi telcel... [[PHOTO]],0
10154395643583692_10154397598508692,"buenas tardes, gracias por su atencion brindada... pude resolver mi duda y asi sabre que es lo mejor para mi. saludos.",1
10154394898978692_10154397173938692,q precio tiene el plan????,2
10154394898978692_10154397265133692,para solicitarlo?,1
The error is the following:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
C:\Program Files\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)
1944 try:
-> 1945 return self._engine.get_loc(key)
1946 except KeyError:
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()
KeyError: 'class'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-54-f52e2494564b> in <module>()
15
16
---> 17 classification = df1['class']
18
19
C:\Program Files\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
1995 return self._getitem_multilevel(key)
1996 else:
-> 1997 return self._getitem_column(key)
1998
1999 def _getitem_column(self, key):
C:\Program Files\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key)
2002 # get column
2003 if self.columns.is_unique:
-> 2004 return self._get_item_cache(key)
2005
2006 # duplicate columns & possible reduce dimensionality
C:\Program Files\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)
1348 res = cache.get(item)
1349 if res is None:
-> 1350 values = self._data.get(item)
1351 res = self._box_item_values(item, values)
1352 cache[item] = res
C:\Program Files\Anaconda3\lib\site-packages\pandas\core\internals.py in get(self, item, fastpath)
3288
3289 if not isnull(item):
-> 3290 loc = self.items.get_loc(item)
3291 else:
3292 indexer = np.arange(len(self.items))[isnull(self.items)]
C:\Program Files\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)
1945 return self._engine.get_loc(key)
1946 except KeyError:
-> 1947 return self._engine.get_loc(self._maybe_cast_indexer(key))
1948
1949 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12368)()
pandas\hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12322)()
KeyError: 'class'
Try this:
df1.columns = [c.strip() for c in list(df1.columns.values)]
print(df1["class"])
The problem was that your class header contained whitespace. Stripping that whitespace with .strip() allows pandas to find the header, thus avoiding the KeyError.

How can i parse this json file without displaying the /n and br tags?

This is the json file:
[{"normal":"1","ID":"67216","category_id":"1","MainHeadline":"Susuwe Lodge am Kwando abgebrannt","ImagePath":"http:\/\/nte.nmh.com.na\/FINALSERVER\/PROCESSEDIMAGE\/030815\/thumb\/0308-3-1-SUSUWE%20(2).JPG","Logo":"http:\/\/nte.nmh.com.na\/MyInfo\/Logos\/AZ_Logo.png","FullStory":"Von Dirk Heinrich, Kongola\\n\u00e2\u0080\u009eIch habe nur noch meinen Personalausweis retten k\u00c3\u00b6nnen, ansonsten ist alles in meiner Unterkunft verbrannt, mein Bett, mein Schrank, alles\u00e2\u0080\u009d, sagte einer der Angestellten der Susuwe Island Lodge,Lukas Ndunda, der zusammen mit Sebastian Moses versucht hatte, am Sonntagnachmittag bei starken Wind das Feuer von der Lodge abzuwenden.\u00e2\u0080\u009c Als das Hauptgeb\u00c3\u00a4ude brannte, sind Moses und ich ins Wasser gesprungen und die 15 bis 20 Meter zum gegen\u00c3\u00bcberliegenden Ufer geschwommen, um uns zu retten\u00e2\u0080\u009d, erz\u00c3\u00a4hlte Ndunda.<br \/>\u00e2\u0080\u009eDie Lodge ist zum gr\u00c3\u00b6\u00c3\u009ften Teil zerst\u00c3\u00b6rt. Binnen einer Stunde war alles vorbei. Wir hatten die Lodge f\u00c3\u00bcr zwei Millionen Namibia-Dollar renoviert und im vergangenen Jahr im Juli wieder er\u00c3\u00b6ffnet. Die Flammen vernichteten das Hauptgeb\u00c3\u00a4ude, drei der sechs Bungalows, alle Unterk\u00c3\u00bcnfte der Angestellten und einen der Wassertanks\u00e2\u0080\u009d, teilte Reinhardt K\u00c3\u00bcsters mit. Er ist der Eigent\u00c3\u00bcmer der Caprivi Lodges, Lianshulu und Susuwe, zusammen mit zwei holl\u00c3\u00a4ndischen Partnern. Besch\u00c3\u00a4digt wurden zudem die Werkstatt und die W\u00c3\u00a4scherei sowie das Geb\u00c3\u00a4ude, in dem ein Generator untergebracht ist. Auch eines der Boote, mit dem Touristen zur Lodge auf der Insel gebracht werden und welches zu Bootsfahrten auf dem Kwando genutzt wird, wurde Opfer der Flammen. Nicht nur die Geb\u00c3\u00a4ude sondern auch die gesamte Inneneinrichtung und Ausr\u00c3\u00bcstung wurden zerst\u00c3\u00b6rt, ebenso die Vorr\u00c3\u00a4te und zahlreiche riesige B\u00c3\u00a4ume, unter denen die Geb\u00c3\u00a4ude standen.<br \/>\u00e2\u0080\u009eWir hatten Gl\u00c3\u00bcck in dem Inferno. Ich habe einige kleinere Verbrennungen erlitten, aber ansonsten ist niemandem etwas passiert\u00e2\u0080\u009d, sagte Moses. K\u00c3\u00bcsters war froh, dass zu dem Zeitpunkt am vergangenen Sonntagnachmittag keine G\u00c3\u00a4ste in der Lodge waren. Gestern Morgen rauchten noch zahlreiche Baumst\u00c3\u00a4mme und das Gel\u00c3\u00a4nde um die Lodge war schwarz und kahl.<br \/>\u00e2\u0080\u009eDas Feuer wurde von irgendjemandem im kommunalen Hegegebiet Mayuni entfacht. Entweder hat jemand bei dem starken Wind, der die letzten Tage wehte, das Veld absichtlich in Brand gesteckt oder jemand hat beim Brandroden nicht aufgepasst. Das Feuer wurde im trockenen Gras von einem starken Ostwind nach Westen getrieben\u00e2\u0080\u009d, sagte K\u00c3\u00bcsters. Selbst der Kwando konnte die Flammen nicht aufhalten. Das Feuer sprang \u00c3\u00bcber den Fluss und wurde weiter nach Westen getrieben. Es \u00c3\u00bcberquerte verschiedene Wasserl\u00c3\u00a4ufe in dem weitverzweigten Gebiet des Kwando und erreichte schlie\u00c3\u009flich die Susuwe Island Lodge. Das zur Hilfe gerufene Personal der Lianshulu Lodge konnte nicht mehr helfen, da das Hauptgeb\u00c3\u00a4ude bereits in Flammen stand, als sie am Westufer im Bwabwata-Nationalpark, Bereich Mudumu-Nationalpark, ankamen. Neben drei Bungalows blieb auch das Haus des Managers von den Flammen unversehrt.<br \/>Wie hoch der Schaden ist, konnte noch nicht festgestellt werden, auch nicht was nun geschehen soll. Vor kurzem wurde in der N\u00c3\u00a4he der Lianshulu Lodge im Mudumu-Nationalpark der namibische Reisef\u00c3\u00bchrer Andi Maier ermordet. Die K\u00c3\u00bcsters k\u00c3\u00bcmmerten sich als Erste um die Freundin des Ermordeten.<br \/>","Edition":"Allgemeine Zeitung","Story":"Von Dirk Heinrich, Kongola\u00e2\u0080\u009e \\\\n Ich habe nur noch meinen Personalausweis retten k\u00c3\u00b6nnen, ansonsten ist alles in meiner Unterkunft verbrannt, mein Bett, mein Schrank, alles\u00e2\u0080\u009d, sagte einer der Angestellten d...d...","ImageCaption":"Nur Schutt und Asche sind vom Hauptgeb\u00c3\u00a4ude \u00c3\u00bcbrig geblieben, in dem die G\u00c3\u00a4ste sich ausruhen","PublishDate":"2015-08-04T18:17:00","Author":"Eberhard Hofmann"},
the url of this file is:http://app.nmh.com.na/generator/getStories.php?CategoryID=1
When i parse it,the app displays the /n and br tags instead of just adding a line beak.Dos anyone know how i can fix this..Please assist..