我正在查看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,我在其中输入一个示例名称并获取一个类实例。在该类实例中,将存在该示例键唯一的字典对象。
答案 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()}