我试图通过迭代嵌套的字典并用Pandas数据框中一行的条目填充每个子词典的值,来用Python中的Pandas数据框中的条目填充词典。
尽管数据字典中的子字典与行中的子字典一样多,但是所有字典都填充有数据帧最后一行中的数据,而不是每个字典都使用每一行。
这是玩具可复制的示例。
var data = JsonConvert.DeserializeObject<dynamic>(rawJson);
var rawForecasts = data.metcheckData.forecastLocation.forecast;
我该如何修改我的代码,以使每个词典填充与数据框不同的行?
答案 0 :(得分:3)
我没有遍历您的代码来查找错误,因为解决方案是使用方法to_dict
的单一代码。
这里是样本数据的最小工作示例。
import pandas as pd
# initialize an empty df
data = pd.DataFrame()
# populate data frame with entries
data['name'] = ['Joe Smith', 'Mary James', 'Charles Williams']
data['school'] = ["Jollywood Secondary", "Northgate Sixth From", "Brompton High"]
data['subjects'] = [['Maths', 'Art', 'Biology'], ['English', 'French', 'History'], ['Chemistry', 'Biology', 'English']]
# redefine index to match your keys
data.index = ['cand{}'.format(i) for i in range(1,len(data)+1)]
# convert to dict
data_dict = data.to_dict(orient='index')
print(data_dict)
这看起来像这样
{'cand1': {
'name': 'Joe Smith',
'school': 'Jollywood Secondary',
'subjects': ['Maths', 'Art', 'Biology']},
'cand2': {
'name': 'Mary James',
'school': 'Northgate Sixth From',
'subjects': ['English', 'French', 'History']},
'cand3': {
'name': 'Charles Williams',
'school': 'Brompton High',
'subjects': ['Chemistry', 'Biology', 'English']}}
答案 1 :(得分:1)
请考虑避免构建字典的回旋处,因为Pandas维护各种方法来渲染嵌套结构,例如to_dict
和to_json
。具体来说,考虑添加新列 cand 并将其设置为to_dict
输出的索引:
data['cand'] = 'cand' + pd.Series((data.index.astype('int') + 1).astype('str'))
mydict = data.set_index('cand').to_dict(orient='index')
print(mydict)
{'cand1': {'name': 'Joe Smith', 'school': 'Jollywood Secondary',
'subjects': ['Maths', 'Art', 'Biology']},
'cand2': {'name': 'Mary James', 'school': 'Northgate Sixth From',
'subjects': ['English', 'French', 'History']},
'cand3': {'name': 'Charles Williams', 'school': 'Brompton High',
'subjects': ['Chemistry', 'Biology', 'English']}}