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”。