Python 数据帧的嵌套字典
我有一个嵌套字典,看起来像这样(这是一个非常简短的版本): 我想要一个excel,看起来像 我正在尝试:Python 数据帧的嵌套字典,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我有一个嵌套字典,看起来像这样(这是一个非常简短的版本): 我想要一个excel,看起来像 我正在尝试: new_list = [] for k1 in remove_empties_from_dict(combined_dict): curr_dict = remove_empties_from_dict(combined_dict)[k1] for k2 in curr_dict: new_dict = {'col1': k1, 'col2'
new_list = []
for k1 in remove_empties_from_dict(combined_dict):
curr_dict = remove_empties_from_dict(combined_dict)[k1]
for k2 in curr_dict:
new_dict = {'col1': k1, 'col2': k2}
for k3 in curr_dict[k2]:
new_dict = {'col1': k1, 'col2': k2, 'col3': k3}
for k4 in curr_dict[k2][k3]:
new_dict= {'col1': k1, 'col2': k2, 'col3': k3, 'col4': k4}
new_list.append(new_dict)
df = pd.DataFrame(new_list)
print df
上面写着一个错误:
“对于货币[k2][k3]中的k4:
TypeError:“float”对象不可编辑
任何关于如何将内部值更改为字符串的想法,很明显它们都是浮点数
谢谢大家! 正如@Fozoro所建议的,您可以通过以下步骤来完成:
my_dct = {('rs1', "rn1"): {'rs2': 'rs3', 'rs4': 'rs5', 'rs6': 'rs7',
'rs8': 'rs9', 'rs10t': 'rs11', 'rs12': 'rs13',
'rs14': 'rs15', 'rs16': 'rs17', 'rs18': 'rs19'},
('rs21', "rn2"): {'rs22': 'rs23'},
('rs24', "rn3"): {'rs25': 'rs26', 'rs27': 'rs28', 'rs29': 'rs30'}}
newdf = pd.DataFrame.from_dict({(i,j): my_dct[i][j]
for i in my_dct.keys()
for j in my_dct[i].keys()},
orient='index').rename(columns={0:"Column 4"})
newdf["Column 1"] = newdf.index.str[0].str[0]
newdf["Column 2"] = newdf.index.str[0].str[1]
newdf["Column 3"] = newdf.index.str[1]
可能是我查过的,但不是,因为他把rs_2放在了专栏的顶部。关于索引值,我想把它放在表中。谢谢你的时间!这给了我一个错误。newdf[“Column 1”]=newdf.index.str[0].str[0],上面写着:“只能使用带索引的.str访问器,而不能使用多索引”您使用哪种python版本?我目前使用的是2.7不能满足工作要求。我想我很快就能解决这个问题了。我会编辑代码,也许你可以从那里得到帮助:)非常感谢:)
my_dct = {('rs1', "rn1"): {'rs2': 'rs3', 'rs4': 'rs5', 'rs6': 'rs7',
'rs8': 'rs9', 'rs10t': 'rs11', 'rs12': 'rs13',
'rs14': 'rs15', 'rs16': 'rs17', 'rs18': 'rs19'},
('rs21', "rn2"): {'rs22': 'rs23'},
('rs24', "rn3"): {'rs25': 'rs26', 'rs27': 'rs28', 'rs29': 'rs30'}}
newdf = pd.DataFrame.from_dict({(i,j): my_dct[i][j]
for i in my_dct.keys()
for j in my_dct[i].keys()},
orient='index').rename(columns={0:"Column 4"})
newdf["Column 1"] = newdf.index.str[0].str[0]
newdf["Column 2"] = newdf.index.str[0].str[1]
newdf["Column 3"] = newdf.index.str[1]