2

我正在尝试在 PiCloud 上运行一些模型模拟并使用 Pandas 处理结果。(PiCloud 基本上是 Amazon 集群的一个接口,我通过它在 Ubuntu 11.04 虚拟环境中运行东西)。

有问题的命令似乎是:

fplf_df = pd.DataFrame(fpld, columns = var_name_list, index = sample_names_ordered)

fpld 是一个 dict(61 个键是字符串,值是一个 numpy 数组(长度为 1),其余为浮点数),而 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 级别可能出了什么问题,我可以弄清楚从我的机器到虚拟环境的通信出了什么问题(或无论真正的问题是什么)。

值得一提的是:我的机器有 pandas 0.9.1rc1(最新的前沿 Ubuntu 12.04 更新,可能是今天早上),亚马逊 env 有 0.9.0(我认为)在 10 月中旬的鸡蛋中。在亚马逊上,来自终端的 IPython 和常规 python 调用似乎正在导入相同版本的 Pandas。

任何帮助,将不胜感激。

谢谢!

4

1 回答 1

2

问题是PiCloud 的默认环境运行的是旧版本的 pandas (0.3.0),这会导致不兼容。最简单的解决方案是使用 PiCloud 的Ubuntu Precise Environment,它运行 pandas 0.9.0。

于 2012-12-12T22:28:09.210 回答