如何将数据框字典转换为数据框?

时间:2018-12-28 16:13:01

标签: python python-3.x pandas python-2.7 numpy

我有一个包含多个键的字典,其中包含一个值,该值看起来像下面的数据框,并且可以具有不同数量的索引。

'key1':

            colB
    colA   
    str1       3
    str2       4
    str3       5

'key2':

            colB
    colA   
    str2       3
    str3       4
    str5       5

'key3':

            colB
    colA   
    str4       3
    str5       4
    str6       5

我想知道如何创建一个看起来像这样的数据框

        str1   str2   str3  ...   str 6
key1     3       4      5    ..    NaN
key2    NaN      3      4    ..    NaN     
key3    NaN     NaN    NaN   ..     5     

缺少值时带有'NaN'。

我已经通过使用reset_index来做到这一点,为每个数据框创建熊猫系列,然后在每行中寻找匹配值以重新创建正确的数据框,但是我发现它非常慢,而且根本不是最佳选择。

3 个答案:

答案 0 :(得分:3)

您可以使用pandas.concat()进行此操作。有关文档Concat Documentation

,请参见此处

例如,假设您的字典名为my_dict,您可以执行以下代码:

pd.concat(my_dict.values())

这假设您已经将熊猫作为pd导入。请参阅文档,了解concat中嵌入的选项。

作为最后的提示,要将其转换为所需的形式,可以使用:

pd.unstack()

获取多索引值作为行标题。或者只是pd.df.rename()

在这里为您提供更多建议,使用代码生成原始数据框将很有帮助。

答案 1 :(得分:1)

我认为您只需要concatunstack注意d是您的dict

pd.concat(d).colB.unstack()
Out[663]: 
colA  str1  str2  str3  str4  str5  str6
k1     3.0   4.0   5.0   NaN   NaN   NaN
k2     NaN   3.0   4.0   NaN   5.0   NaN
k3     NaN   NaN   NaN   3.0   4.0   5.0

答案 2 :(得分:1)

请参阅示例代码:

import pandas as pd
key1 = {'str1':3,'str2':4,'str3':5}
key2 = {'str2':3,'str3':4,'str5':5}
key3 = {'str4':3,'str5':4,'str6':5}

df1=pd.DataFrame.from_dict(key1, orient='index')
df1.rename(columns={0:'key1'},inplace=True)
df2=pd.DataFrame.from_dict(key2, orient='index')
df2.rename(columns={0:'key2'},inplace=True)
df3=pd.DataFrame.from_dict(key3, orient='index')
df3.rename(columns={0:'key3'},inplace=True)

df = pd.concat([df1,df2,df3],axis=1)
df_final=df.T
df_final.head()

代码非常简单,如果您需要更多说明,请告诉我。