2013-04-04 32 views
0

我从数据库中装载的数据,并创建一个数据帧的数据帧透视型执行数据分析,在熊猫

db_resultset = self.result.fetchall() 
df = DataFrame(db_resultset) 
df.columns = self.result.keys() 
pivoted_data = df.pivot(index='id', columns='item') 

    data = 
    id item val 
    1 A 10 
    2 A 25 
    1 B 12 
    1 C 15 
    2 C 2 
    1 D 7 
    2 D 9 
    ... 

    pivoted_data = 
     A B C D 
    1 10 12 15 7 
    2 25 NaN 2 9 
    ... 

而且我想计算像成对相关,pivoted_data.corr(),这会导致此类错误的事情如:

File "/.../pandas/core/frame.py", line 4469, in corr 
    numeric_df = self._get_numeric_data() 
    File "/.../pandas/core/frame.py", line 4989, in _get_numeric_data 
    return self.ix[:, []] 
    File "/.../pandas/core/indexing.py", line 34, in __getitem__ 
    return self._getitem_tuple(key) 
    File "/.../pandas/core/indexing.py", line 224, in _getitem_tuple 
    retval = retval.ix._getitem_axis(key, axis=i) 
    File "/.../pandas/core/indexing.py", line 342, in _getitem_axis 
    return self._getitem_iterable(key, axis=axis) 
    File "/.../pandas/core/indexing.py", line 408, in _getitem_iterable 
    not isinstance(keyarr[0], tuple)): 

什么是对一组数据执行分析的最佳方法?我曾想过将pivoted_data转换回DataFrame,但这似乎不是一个理想的解决方案。

** 编辑:

回应杰夫的评论:

pivoted_data.get_dtype_counts() = 
object 319 
+0

pivoted_data是一个DataFrame,但您的数据可能是对象类型,后期pivoted_data.get_dtype_counts() – Jeff 2013-04-04 17:15:53

+0

@Jeff,感谢您的评论。你能否扩展为什么'object'类型导致问题,以及我如何解决它? – pjama 2013-04-04 17:20:56

+0

尝试pivoted_data.astype('float64'),然后做你所需要的。 (你也可以指定dtype ='float64')在数据帧的结构上(注意如果你有非浮点类型,那么这可能会中断,你将不得不逐列) – Jeff 2013-04-04 17:21:57

回答

0

不知道它是否被正确读取行到数据帧。请尝试:

df = pd.DataFrame.from_records(db_curr.fetchall(), 
           index=["id", "item"], 
           columns=[col_desc[0] for col_desc in db_curr.description]) 
df = df.unstack() 

最后一行生成旋转数据。