我有一个包含多个键的字典,其中包含一个值,该值看起来像下面的数据框,并且可以具有不同数量的索引。
'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来做到这一点,为每个数据框创建熊猫系列,然后在每行中寻找匹配值以重新创建正确的数据框,但是我发现它非常慢,而且根本不是最佳选择。
答案 0 :(得分:3)
您可以使用pandas.concat()
进行此操作。有关文档Concat Documentation
例如,假设您的字典名为my_dict
,您可以执行以下代码:
pd.concat(my_dict.values())
这假设您已经将熊猫作为pd导入。请参阅文档,了解concat中嵌入的选项。
作为最后的提示,要将其转换为所需的形式,可以使用:
pd.unstack()
获取多索引值作为行标题。或者只是pd.df.rename()
在这里为您提供更多建议,使用代码生成原始数据框将很有帮助。
答案 1 :(得分:1)
我认为您只需要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
答案 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()
代码非常简单,如果您需要更多说明,请告诉我。