首页 > 解决方案 > 为什么在具有混合元素类型的 Pandas DataFrame 中,当我更改元素时出现“ValueError”?

问题描述

所以想象一下,我有一个如下所示的数据框(将 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]})

现在,如果我想使用以下方法替换“a”列中的 3 个元素:

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])]})

并使用之前的命令替换第三项,我不会收到任何错误。我在这里做错了什么?没有此错误的更好做法是什么?

PS 我在 ubuntu 18.10 和 Pycharm IDE (2019.3.3) 上使用 Python 3.7.5。我的熊猫版本是 0.25.3,numpy 是 1.17.3 。

标签: pythonpython-3.xpandasdataframe

解决方案


df.at在您尝试访问单个值时使用。df.loc允许您访问可能存在问题的多行和多列,尽管我不完全确定。查看文档

df.at[2,'a'] = np.array([52,23,34])

推荐阅读