从Pandas DataFrame存储数据的最快方法

时间:2015-10-15 19:52:20

标签: python numpy pandas machine-learning dataframe

我正在查看Fastest way to iterate through a pandas dataframe?,我不确定它是否适用于我的情况。我想在DataFrame

中创建一个样本和特征的字典
#DF_gex is a DataFrame

D_sample_Data = {}

class Sample:
    def __init__(self,D_key_value):
        self.D_key_value = D_key_value 

for i in range(DF_gex.shape[0]):
    D_key_value = {}
    sample = DF_gex.index[i]
    for j in range(DF_gex.shape[1]):
        key = DF_gex.columns[j]
        value = DF_gex.iloc[i,j]
        D_key_value[key] = value
    D_sample_Data[sample].D_key_value = D_key_value

在这种情况下,我基本上有一个名为Sample的类,在Sample类中,我为每个实例存储一个字典(D_key_value)。现在我正在遍历每一行和每一列。

有更快的方法吗?我知道Pandas基于Numpy数组,它具有索引的特殊功能。可以使用其中一种方法吗?

最后,我将有一个字典对象D_sample_Data,我在其中输入一个示例名称并获取一个类实例。在该类实例中,将存在该示例键唯一的字典对象。

1 个答案:

答案 0 :(得分:1)

如果你只是想要一个字典字典,其中外部字典的键是索引,内部字典的键是列,值是该索引列的对应值(或包含字典的类的字典) )。

然后你不需要循环,你可以简单地使用DataFrame.to_dict()方法。示例 -

resultdict = df.T.to_dict()

或者从Pandas版本0.17.0开始,您也可以使用关键字参数orient='index'。示例 -

resultdict = df.to_dict(orient='index')

演示 -

In [73]: df
Out[73]:
   Col1  Col2  Col3
a     1     2     3
b     4     5     6
c     7     8     9

In [74]: df.T.to_dict()
Out[74]:
{'a': {'Col1': 1, 'Col2': 2, 'Col3': 3},
 'b': {'Col1': 4, 'Col2': 5, 'Col3': 6},
 'c': {'Col1': 7, 'Col2': 8, 'Col3': 9}}

如果您希望外部字典的值为class Sample类型,但我几乎不怀疑它是否有用,那么您可以这样做 -

class Sample:
    def __init__(self,D_key_value):
        self.D_key_value = D_key_value 

resultdict = df.T.to_dict()

resultdict = {k:Sample(v) for k,v in resultdict.items()}