我的第一个 StackOverflow 问题。
所以我有一个看起来像这样的 Pandas DataFrame:
String1 String2 String3 value
word1 word2 word3 5.6
word4 word5 word6 123.4
...
这种 DataFrame 来自基于大量文本的非常长的处理链。(附带说明一下,我正在接近内存限制,现在正在考虑使用 HDFStores。)
现在,我想基于将此表转换为(稀疏?)面板或其他一些用 0 填充空白的有效数据结构来进行线性代数运算。也就是说,我想创建一个表,其行是 String3s,其列是 String1 x String2 对,然后对行进行线性代数运算。但是,我也希望能够对任何其他列执行相同的操作——即,将 String1 作为行,并从 String2 x String3 中创建列。
我一直在尝试使用面板和数据透视表,但它们似乎不太正确,而且它们经常会溢出内存。
一般而言,使用 Pandas 或 Python(2.7)执行此操作的正确方法是什么?
编辑添加此示例:
输出表将如下所示:
String1String2 (word1,word2) (word1,word5) (word4,word2) (word4,word5) ...
String3
word3 5.6 0 0 0 ...
word6 0 0 0 123.4 ...
列数基本上是|String1| x |字符串2|。或者,作为列的 String3 和作为行的 String1String2 也可以,因为我可以对列系列执行操作。
进一步编辑以添加内存问题:
In [1]: import pandas as pd
In [2]: A = pd.load("file.df")
In [3]: A
Out[3]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 18506532 entries, 0 to 18506531
Columns: 4 entries, 0 to value
dtypes: float64(1), object(3)
In [4]: B = A[A[1] == 'xyz']
In [5]: C = B.pivot_table('value', [1,2], 0)
它在 reshape.pyc 的第 160 行出现 MemoryError 崩溃。这是熊猫的 0.11.0 版本。