Pandas 尝试将数据组织到df表单中

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

我收到两个日期中的一个大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'}, '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是钠量而不是钾量。