Доступ к первому элементу в списке не работает - PullRequest
0 голосов
/ 24 апреля 2018

В моем DataFrame у меня есть список с диктовками.Когда я делаю

data.stations.apply(lambda x: x)[5]

, вывод выглядит так:

[{'id': 245855,
'outlets': [{'connector': 13, 'id': 514162, 'power': 0},
   {'connector': 3, 'id': 514161, 'power': 0},
   {'connector': 7, 'id': 514160, 'power': 0}]},
 {'id': 245856,
  'outlets': [{'connector': 13, 'id': 514165, 'power': 0},
   {'connector': 3, 'id': 514164, 'power': 0},
   {'connector': 7, 'id': 514163, 'power': 0}]},
 {'id': 245857,
  'outlets': [{'connector': 13, 'id': 514168, 'power': 0},
   {'connector': 3, 'id': 514167, 'power': 0},
   {'connector': 7, 'id': 514166, 'power': 0}]}]

Таким образом, это выглядит как 3 дикта в списке.

Когда я делаю

data.stations.apply(lambda x: x[0] )[5]

Он делает то, что должен:

{'id': 245855,
 'outlets': [{'connector': 13, 'id': 514162, 'power': 0},
  {'connector': 3, 'id': 514161, 'power': 0},
  {'connector': 7, 'id': 514160, 'power': 0}]}

ОДНАКО, когда я выбираю второй или третий элемент, он не работает:

data.stations.apply(lambda x: x[1])[5]

Это выдает ошибку:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-118-1210ba659690> in <module>()
----> 1 data.stations.apply(lambda x: x[1])[5]

~\AppData\Local\Continuum\Anaconda3\envs\geo2\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
   2549             else:
   2550                 values = self.asobject
-> 2551                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   2552 
   2553         if len(mapped) and isinstance(mapped[0], Series):

pandas/_libs/src/inference.pyx in pandas._libs.lib.map_infer()

<ipython-input-118-1210ba659690> in <lambda>(x)
----> 1 data.stations.apply(lambda x: x[1])[5]

IndexError: list index out of range

Почему?Это должно просто дать мне второй элемент.

1 Ответ

0 голосов
/ 24 апреля 2018

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

data = pd.DataFrame({'stations':[[{'1':2,'3':4},{'1':2,'3':4},{'1':2,'3':4}],
                                [{'1':2,'3':4},{'1':2,'3':4}],
                                [{'1':2,'3':4}],
                                 [{'1':2,'3':4},{'1':2,'3':4},{'1':2,'3':4}]]
                    })

                                         stations
0  [{'1': 2, '3': 4}, {'1': 2, '3': 4}, {'1': 2, ...
1               [{'1': 2, '3': 4}, {'1': 2, '3': 4}]
2                                 [{'1': 2, '3': 4}]
3  [{'1': 2, '3': 4}, {'1': 2, '3': 4}, {'1': 2, ...

Если вы сделаете:

data['stations'].apply(lambda x: x[0])[3]

Вы получите:

{'1': 2, '3': 4}

Но если вы сделаете:

data['stations'].apply(lambda x: x[1])[3]

Вы получите Index Error... list out of bounds, потому что, если вы наблюдаете 3-ю строку, в списке будет только один элемент.Надеюсь, это очистит ваши сомнения.

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