0

我目前正在通过大量 PDF 解析我的方式,并根据它们所属的模块提取硬件地址列表。这个想法是构建一个依赖关系图,这将有助于任何未来的代码逆向。由于问题的性质非常大,我使用 pandas 作为主要的数据库 API,因为它很容易将函数应用于列。

数据库 数据库包括两个字段,即地址和模块名称(见下文)。其中每条记录详细说明了单个(且唯一)地址相对于其成员的模块的成员资格。Associate Modules 字段的类型为 List 并且可以具有不同数量的元素。但是地址只有一个值。

问题 理想情况下,使用优化的 Pandas API,如何将下面的“RawTable”转换为“依赖表”?非常感谢代码示例。

<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     *
***********************************

谢谢你的帮助。

4

1 回答 1

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()方法。可能有一种更时尚的方式,但不是太丑陋。

于 2013-03-12T15:49:16.797 回答