忽略0-d数组是python策略。 0
和array(0)
在技术上没有区别。对于标准熊猫,这是受支持的。但是,MultiIndex
并非如此。考虑
import numpy as np
from matplotlib import pyplot
import pandas as pd
np.random.seed(1234)
# params, initials
T = 100 # time
N = 80 # firms
TIndex = np.arange(0, T)
FIndex = np.arange(0, N)
index = pd.MultiIndex.from_product([TIndex, FIndex], names=['time', 'firm'])
df = pd.DataFrame(-999, columns=['A', 'w', 'l', 'a', 'x', 'X', 'd', 'profit'], index=index)
t, n = 0, 2
df.loc[(t,n), 'X'] = np.array(0)
pd.__version__
df.loc[(t,n), 'X']
这会给我一个追溯:
Traceback (most recent call last):
File "C:\Users\sdaro\AppData\Local\Enthought\Canopy\User\lib\site-packages\IPython\core\interactiveshell.py", line 2883, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-180-766f1cc7a0e5>", line 1, in <module>
df.loc[(t,n), 'X'] = np.array(0)
File "C:\Users\sdaro\AppData\Local\Enthought\Canopy\User\lib\site-packages\pandas\core\indexing.py", line 119, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:\Users\sdaro\AppData\Local\Enthought\Canopy\User\lib\site-packages\pandas\core\indexing.py", line 342, in _setitem_with_indexer
if is_list_like(value) and lplane_indexer != len(value):
TypeError: len() of unsized object
更新
解决第一条评论;我的意思是“在技术上没有区别”是“在大多数情况下”,设计用于接受值的应用程序也应该采用单例。 pandas
通常支持这一点,正如
>>> test = pd.DataFrame(index = array([0, 1, 2]), columns=['A'])
>>> test.ix[0, 'A'] = 1
>>> test.ix[1, 'A'] = array(1)
>>> test
Out[190]:
A
0 1
1 1
2 NaN
正是在这种特殊情况下,它不起作用,这就是为什么我认为这不是预期的行为。