我正在尝试在 PiCloud 上运行一些模型模拟并使用 Pandas 处理结果。 (PiCloud 基本上是 Amazon 集群的接口(interface),我通过它在 Ubuntu 11.04 虚拟环境上运行)。
有问题的命令似乎是:
fplf_df = pd.DataFrame(fpld, columns = var_name_list, index = sample_names_ordered)
fpld 是一个字典(61 个键是字符串,值是一个 numpy 数组(长度为 1),其余为 float ),var_name_list 和 sample_names_ordered 是字符串列表或数组。
当我运行包含该命令的脚本时,所有 PiCloud 作业都会终止并出现以下错误:
Traceback (most recent call last):
File "/usr/local/picloud/.employee/pimployee/job_util.py", line 119, in process_job
result = func(*args, **kwargs)
File "/home/itchy/ecopetrol/ec-working/pecube_scripts/run_eceS1_cloud.py", line 297, in run_pecube_map
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 125, in __init__
sdict, columns, index = self._init_dict(data, index, columns, dtype)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 176, in _init_dict
v = Series(v, index=index)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/series.py", line 172, in __new__
subarr.index = index
File "/usr/local/lib/python2.7/dist-packages/pandas/core/series.py", line 193, in _set_index
raise AssertionError('Lengths of index and values did not match!')
AssertionError: Lengths of index and values did not match!
问题在于,当我在我的机器上运行它时,它工作正常,当我 ssh 进入 Amazon 服务器上的虚拟环境并使用 IPython 手动创建 DataFrame 时,它工作正常。我还尝试通过提供不存在的索引参数或其他任意索引参数来重现该错误,有些成功,有些则失败,但没有一个会引发此特定错误。在我看来(通过手动测试证实),索引的长度到底是多少并不重要,因为这些值只组成一行,所以当添加索引时,它只会填充下来,这正是我想要的。
那么到底是什么导致了这个错误呢?我怀疑问题的根源在于 Pandas,但我认为如果我知道 Pandas 级别可能出现什么问题,我可以找出从我的机器到虚拟环境的通信出了什么问题(或者无论真正的问题是什么)。
就其值(value)而言: 我的机器有 pandas 0.9.1rc1(最新的前沿 Ubuntu 12.04 更新,也许是今天早上),亚马逊环境有 0.9.0(我认为)来自 10 月中旬的鸡蛋。在 Amazon 上,IPython 和来自终端的常规 python 调用似乎正在导入相同版本的 Pandas。
如有任何帮助,我们将不胜感激。
谢谢!
最佳答案
问题是 PiCloud's默认环境运行旧版本的 pandas (0.3.0),这会导致不兼容。最简单的解决方案是使用 PiCloud 的 Ubuntu Precise Environment ,运行 pandas 0.9.0。
关于python - pandas数据帧索引错误: AssertionError: Lengths of index and values did not match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423689/