2013-03-11 31 views
0

我目前正在解析我通過一大堆PDF的方式,並根據他們屬於哪個模塊提取硬件地址列表。這個想法是構建一個依賴關係圖,這將有助於將來任何代碼的逆轉。 由於問題的性質非常大,我使用熊貓作爲主要的數據庫API,因爲它非常易於將列函數應用於函數。移調多維表

數據庫 數據庫包含兩個字段,即地址和模塊名稱(見下文)。 每個記錄詳細說明了單個(和唯一)地址的成員關於其成員的模塊。關聯模塊字段是List類型的,並且可以具有不同數量的元素。但地址只有一個值。

問題 理想情況下,使用優化的Pandas API,如何將下面的「RawTable」轉換爲 「Dependency Table」?代碼示例非常感謝。

<Current Database> 
xxxxx*[Pandas::RawTable]****** 
* Address * Associate Modules * 
****************************** 
* 1000 * ["1A","2A","3A"] * 
* 1001 * ["2A","4A","5A"] * 
* 1002 * ["1A", "4A"] * 
****************************** 

<Future Database> 
******[Pandas:: DependencyTable**** 
* Associate Modules * Address * 
*********************************** 
*  "1A"   *  1000  * 
*  "1A"   *  1002  * 
*  "2A"   *  1000  * 
*  "2A"   *  1001  * 
*  "3A"   *  1000  * 
*  "4A"   *  1001  * 
*  "4A"   *  1002  * 
*  "5A"   *  1001  * 
*********************************** 

感謝您的幫助。

回答

0

它看起來像模塊作爲一列列加載。

In [1]: df = DataFrame(
     {'Address': [1000, 1001, 1002], 
     'Associate Modules': [['1A', '2A', '3A'], 
           ['2A', '4A', '5A'], 
           ['1A', '4A']]}) 

我會先把相關的模塊分成不同的列。

In [2]: modules = df['Associate Modules'].apply(Series) 
In [3]: modules.index = df['Address'] 
In [4]: modules 
Out[4]: 
      0 1 2 
Address    
1000  1A 2A 3A 
1001  2A 4A 5A 
1002  1A 4A NaN 

然後堆疊DataFrame,並刪除我們的虛擬列索引。

In [5]: result = modules.stack() 
In [6]: result.index = result.index.get_level_values(0) 

In [7]: result 
Out[7]: 
Address 
1000  1A 
1000  2A 
1000  3A 
1001  2A 
1001  4A 
1001  5A 
1002  1A 
1002  4A 

如果您希望Address作爲適當的列而不是索引,請使用reset_index()方法。有可能是一個更光滑的方式,但不是太難看。