2015-10-15 238 views
0

我正在查看Fastest way to iterate through a pandas dataframe?,我不确定它是否可以应用于我的情况。我想使样品和功能的字典中数据帧从Pandas 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 

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

有没有更快的方法来做到这一点?我知道熊猫是基于Numpy数组,它具有用于索引的特殊功能。这些方法中的一种可以用于这个吗?

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

+0

你可以更新什么样的你正在寻找的输出? –

+0

@AnandSKumar我添加了输出的类型。它基本上是一个字典,其中D_sample_Data导致类实例,并且该实例具有一些字典和其他对象。这是我能想到的最简单的例子 –

回答

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()} 
+0

我只是将我的熊猫更新到了17.感谢那正是我需要的! –

相关问题