Pandas 尝试将数据组织到df表单中
我收到两个日期中的一个大json,返回实验室中存储的一些化学元素的清单Pandas 尝试将数据组织到df表单中,pandas,Pandas,我收到两个日期中的一个大json,返回实验室中存储的一些化学元素的清单 ElementData是json 1接收器,具有以下INF结构: 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'}, 'Fluori
ElementData
是json 1接收器,具有以下INF结构:
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
我面临的主要问题是在数据框中插入值,这是我第一次处理此问题,并且不确定要遵循的步骤。您拥有的数据似乎包含3个重要特征,即化学名称、测量日期和测量本身 数据帧可以由称为序列的较小对象构造。一个系列有一个名称、一组值和一个用于标识每个值的索引,所以它不是一个不好的匹配 另外还有一个帮助,就是您可以将一组系列组合到一个数据帧中,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'})
最后一行中有很多内容,但本质上,这是两个系列的组合,指定系列表示列(axis=0将尝试将它们端到端组合为一个包含4条记录的列表),并从默认的0,1,2设置列名,。。。值转换为相应的英文名称
在上面的示例中,测量的索引(日期)在两组不同的测量之间对齐,但是如果存在一些不对齐,例如您有不同的读数数量,或者读数的日期不同,pandas仍将创建数据框,但将使用NaN(默认情况下)填充缺失的值 会有帮助吗?orient参数可能可以做到这一点。你能分享你的
json
示例吗?@zipa当然可以1min@ge00rge您编写的预期df看起来有误。10.07是钠量而不是钾量。