2013-04-04 62 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() 

最後一行生成旋轉數據。