Почему в Pandas DataFrame с типами элементов микс, когда я меняю элемент, я получаю «ValueError»? - PullRequest
1 голос
/ 28 февраля 2020

Итак, представьте, что у меня есть нижеприведенный фрейм данных (импортируйте pandas как pd, импортируйте numpy как np):

df = pd.DataFrame({'a': [np.array([1,2,3]), np.array([4,5,6]), np.array([7,8,9]), np.array([10,11,12]), np.array([13,14,15])], 'b':[5,5,12,123,5]})

Теперь, если я хочу заменить 3 элемента в столбце 'a 'using:

df.loc[2,'a']= np.array([53,23,4])

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "...", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-67-4741bddaf261>", line 1, in <module>
    df.loc[0,'a']= np.array([53,23,4])
  File "...", line 205, in __setitem__
    self._setitem_with_indexer(indexer, value)
  File "...", line 547, in _setitem_with_indexer
    "Must have equal len keys and value "

ValueError: Must have equal len keys and value when setting with an iterable

Теперь, если я удалю второй столбец (' b ') и сделаю мой фрейм данных как

df = pd.DataFrame({'a': [np.array([1,2,3]), np.array([4,5,6]), np.array([7,8,9]), np.array([10,11,12]), np.array([13,14,15])]})

и используйте точно предыдущую команду для замены 3-го пункта, я не получу никакой ошибки. Что я здесь не так делаю? Как лучше избегать этой ошибки?

PS Я использую Python 3.7.5 в Ubuntu 18.10 и Pycharm IDE (2019.3.3). Версия моего pandas - 0.25.3, numpy - 1.17.3.

1 Ответ

1 голос
/ 28 февраля 2020

Используйте df.at, поскольку вы пытаетесь получить доступ к одному значению. df.loc позволяет вам получить доступ к нескольким строкам и столбцам, где проблема может быть ie, хотя я не совсем уверен. Ознакомьтесь с документацией .

df.at[2,'a'] = np.array([52,23,34])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...