Игнорирование ошибок при разборе списка списков для словаря в пандах DataFrame - PullRequest
0 голосов
/ 05 декабря 2018

Как заставить панд игнорировать неверные элементы словаря в списке?

Для простоты, если у меня есть случай из первой версии решения из предыдущего вопроса:

L =[['Manufacturer: Hyundai',
  'Model: Tucson',
  'Mileage: 258000 km',
  'Registered: 07/2019'],
 ['Manufacturer: Mazda',
  'Model: 6',
  'Year: 2014',
  'Registered: 07/2019',
  'Comfort',
  'Safety']]

df = pd.DataFrame([dict(y.split(':') for y in x) for x in L])
print (df)

Второй элемент dictу двух последних предметов пропущены значения («Комфорт» и «Безопасность»), но они также отсутствуют «:», поэтому панды выбрасывают:

ValueError: dictionary update sequence element #5 has length 1; 2 is required

Как сказать пандам игнорировать ошибки этого типа и продолжить спарсинг списка?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Если значения без : являются ключами, можно добавить if-else:

df = pd.DataFrame([dict(y.split(':') if ':' in y else (y, np.nan) for y in x) for x in L])
print (df)
       Comfort Manufacturer     Mileage    Model Registered  Safety   Year
0      NaN      Hyundai   258000 km   Tucson    07/2019     NaN    NaN
1      NaN        Mazda         NaN        6    07/2019     NaN   2014
0 голосов
/ 05 декабря 2018

Просто добавьте небольшое условие if.

pd.DataFrame([
    dict(y.split(':') for y in x if ':' in y) for x in L])

  Manufacturer     Mileage    Model Registered   Year
0      Hyundai   258000 km   Tucson    07/2019    NaN
1        Mazda         NaN        6    07/2019   2014

Если вы хотите включить эти значения как NaN, то измените if на if-else в пределах понимания.

pd.DataFrame([
    dict(y.split(':') if ':' in y else (y, np.nan) for y in x) for x in L])


   Comfort Manufacturer     Mileage    Model Registered  Safety   Year
0      NaN      Hyundai   258000 km   Tucson    07/2019     NaN    NaN
1      NaN        Mazda         NaN        6    07/2019     NaN   2014
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...