所以想象一下,我有一个如下的数据帧(导入panda为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])]})
并使用之前的命令来替换第三项,我不会收到任何错误。我在这里做错了什么?最好的做法是不犯这个错误?
附言:我在ubuntu 18.10和Pycharm IDE(2019.3.3(上使用Python 3.7.5。我的Panda版本是0.25.3,numpy是1.17.3。
在尝试访问单个值时使用df.at
。df.loc
允许您访问多行和多列,这可能是问题所在,尽管我不完全确定。查看文档。
df.at[2,'a'] = np.array([52,23,34])