取消对pandas数据帧的解除错误

时间:2015-03-22 07:49:06

标签: python python-2.7 pandas pickle

我在服务器上运行此代码:

import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(100).reshape(25,4))
pickled=pickle.dumps(df)
print repr(pickled)

此客户端上的代码读取服务器的标准输出

import pandas as pd
import numpy as np
pickled=eval(read_from_server())
df=pickle.loads(pickled)

出于某种原因,我收到了这个错误:

AttributeError: 'module' object has no attribute '_new_Index'

任何想法如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我实施的解决方案有点像黑客。

在将DataFrame发送到客户端之前,每个dict都会转换为dict,并且假定每个密钥中具有相同项目数的每个DataFrame都来自{pandas 1}}。

即使客户端和服务器安装了if type(ret)==pd.DataFrame: ret=ret.to_dict() pickled=pickle.dumps(ret) send_to_client(repr(pickled)) 的不同版本,此方法仍然有效。

在服务器端:

    pickled=eval(read_from_server())
    ret=pickle.loads(pickled)
    if (type(ret)==dict):
        #if all the dictionary keys have the same number of records:
        if len(set([len(ret[k]) for k in ret.keys()]))==1:
            ret=pd.DataFrame(ret)

在客户端:

res.render('route/to/view', {data: result, moredata: resultTwo})