我收到了两个日期中的一个大json,它返回了实验室中存储的一些化学元素的清单。
ElementData
是json 1收到的,具有以下结构:
ElementData= [{'_id': '', 'date': '2017-06-01T00:00:00.000Z', 'values': {'Boron':
{'amount': 58.67,'time': '15:40:02'}, 'Cobalt':
{'amount': '108.25', 'time': '11:35:39'}, 'Fluorine':
{'amount': '13.25','time': '09:38:48'},
'silver': {'amount': '200.89', 'time':
'13:28:14'}, 'chronium': {'amount': '10.22',
'time': '14:00:30'}...
}
}
]
为了从json获取日期,我在下面的代码中使用item['date']
,我收到:
dates=[]
for item in ElementData:
dates.append((item['date'])[0:10])
print(dates)
返回我的特殊json:
['2017-06-01', '2017-06-02']
另一方面,我有一个元素列表,我希望从中找到存储这些日期的化学量。
list=['Potasium','Sodium']
要获取给定日期所列元素的存储量,我使用的代码是:
for elements in list:
for item in ElementData:
print (elements + ' amount for date ' +item['date'][0:10]+ ' was:' + str(item['values'][elements]['amount']))
返回以下内容:
potassium amount for date 2017-06-01 was:12.19
potassium amount for date 2017-06-02 was:10.07
sodium amount for date 2017-06-01 was:7.22
sodium amount for date 2017-06-02 was:30.07
我面临的问题是,我希望使用给定的数据来获取这样的数据帧:
Potasium Sodium
2017-06-02 10.07 30.07
2017-06-01 12.19 7.22
我面临的主要问题是在数据框中插入值,这是我第一次处理这个问题而不确定要遵循的步骤。
答案 0 :(得分:2)
您拥有的数据似乎包含3个重要功能,化学名称,测量日期和测量本身。
可以从名为Series的较小对象构造数据帧。系列有一个名称,一组值和一个用于标识每个值的索引 - 所以它不是一个不合适的。
另外有用的是,你可以将一堆系列组合成一个数据帧,而pandas将负责当指数不对齐时会发生什么。
因此,构建系列的一种方法是组合一对列表,一个列表包含从数据构造的值集,另一个列表包含索引记录。
import pandas as pd
sodium = [ 7.22, 30.07 ]
sodium_index = [ '2017-06-01', '2017-06-02' ]
potassium = [12.19, 10.07]
potassium_index = [ '2017-06-01', '2017-06-02' ]
sodium_series = pd.Series(sodium, index=sodium_index)
potassium_series = pd.Series(potassium, index=potassium_index)
它为您提供了一对系列对象,可以组合形成数据框:
chemical_df = pd.concat([sodium_series, potassium_series],axis=1).rename(columns={0:'Sodium',1:'Potassium'})
在最后一行中有很多事情发生 - 但实质上,它是两个系列的组合,指定系列代表列(轴= 0会尝试将它们端到端地结合起来)作为4个记录的列表)并将列名从默认的0,1,2,...值设置为适当的英文名称。
在上面的例子中,测量的索引(日期)在两组不同的测量中对齐,但如果有一些不对齐,说你有不同的读数,或者读数的日期不同,大熊猫仍将创建数据框,但将使用NaN填充缺失值(默认情况下)。