尝试将数据组织成df格式

时间:2017-06-05 08:15:22

标签: pandas

我收到了两个日期中的一个大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 

我面临的主要问题是在数据框中插入值,这是我第一次处理这个问题而不确定要遵循的步骤。

1 个答案:

答案 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填充缺失值(默认情况下)。