Python 如何将数据帧字典转换为数据帧?

Python 如何将数据帧字典转换为数据帧?,python,python-3.x,pandas,python-2.7,numpy,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

我有一个包含多个键的字典,其中包含一个值,一个数据帧,如下所示,可以有不同数量的索引

'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完成了这项工作,为每个数据帧创建pandas系列,然后查找每行的匹配值以重新创建正确的数据帧,但我发现它非常慢,而且根本不是最优的。

您可以使用
pandas.concat()
来完成这项工作。有关文档,请参见此处

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

pd.concat(my_dict.values())
这假设您已经将熊猫作为pd导入。有关concat中嵌入的选项,请参阅文档

最后,要将其转换为您想要的形式,您可以使用:

pd.unstack()
以获取作为行标题的多索引值。或者干脆
pd.df.rename()


为了给您提供更多建议,让代码生成原始数据帧会很有帮助。

您可以使用
pandas.concat()
完成此操作。有关文档,请参见此处

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

pd.concat(my_dict.values())
这假设您已经将熊猫作为pd导入。有关concat中嵌入的选项,请参阅文档

最后,要将其转换为您想要的形式,您可以使用:

pd.unstack()
以获取作为行标题的多索引值。或者干脆
pd.df.rename()


为了给您提供更多建议,让代码生成原始数据帧会很有帮助。

我认为您需要的只是
concat
unstack
注意
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

我想你需要的只是
concat
unstack
注意
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
请参见示例代码:

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()
代码非常简单,如果需要更多解释,请告诉我。

请参阅示例代码:

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()

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

如何保持行的相同顺序,因为键是从A到Z排序的?如何保持行的相同顺序,因为键是从A到Z排序的?从标题中删除“csv”。从标题中删除“csv”。