Значение не в индексе при подстановке данных - PullRequest
0 голосов
/ 25 сентября 2018

У меня проблемы с фреймом данных в Python.

Я хотел бы только те столбцы с определенным текстом ("Grado en"), но я получаю ошибку:

Невозможно индексировать вектором, содержащим значения NA / NaN, если нет ни NA, ни NaN.

Если я использую опцию na=False, он вернет пустой фрейм данных.Я искал решение, но ничего не могу найти.

Вот мой код:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import pandas as pd

list_of_titles_graus = []

html_graus = urlopen("https://www.universidadviu.es/grados-online") # Insert your URL to extract
bsObj_graus = BeautifulSoup(html_graus.read());

    for link in bsObj_graus.find_all('div'):
        list_of_titles_graus.append((link.span))


df_graus = pd.DataFrame({'title': list_of_titles_graus})

#Depuramos para que nos queden solo los titulos de los grados.

graudep = df_graus.dropna() #Eliminamos N/As
graudep = graudep.drop_duplicates() # Eliminamos duplicados.

#Check if there are NA or NaN
graudep.isnull().sum().sum()
graudep.isna().sum().sum()

#This gives me the error.
graudep = graudep[(graudep['title'].str.contains("Grado en"))]

KeyError: '[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan\n nan nan...] not in index'

#This doesn't do anything.
graudep = graudep[(graudep['title'].str.contains("Grado en", na=True))]

#This returns an empty dataframe.
graudep = graudep[(graudep['title'].str.contains("Grado en", na=False))]

Мой желаемый вывод следующий:

207  Grado en Psicología
221  Grado en Educación Primaria
233  Grado en Derecho
245  Grado en Traducción e Interpretación
257  Grado en Ingeniería Informática
269  Grado en Relaciones Internacionales
281  Grado en Trabajo Social
293  Grado en Administración y Dirección de E...
306  Grado en Educación Infantil
318  Grado en Criminología y Ciencias de la S...
330  Grado en Musicología
342  Grado en Economía

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Это работает с пандами 0.23.3:

(df_graus
  .assign(title = lambda d: d.title.apply(str)) # convert title elements from bs4 to string 
  .loc[lambda d: d.title.apply(lambda elt: "Grado en" in elt)] # filter in strings that contain "Grado en"
)
0 голосов
/ 25 сентября 2018

Если вы уверены, что нет NA, то, возможно, попробуйте что-то вроде:

graudep.loc[graudep.title.apply(lambda elt: "Grado en" in elt)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...