如何从Python中的多个字符串中提取多个数据点?

时间:2017-05-22 15:07:36

标签: python-3.x pandas

我有一个由数千个条目组成的数据集,如下所示:

[{'country': {'id': '1A', 'value': 'Arab World'},
  'date': '2016',
  'decimal': '0',
  'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
  'value': None},
 {'country': {'id': '1A', 'value': 'Arab World'},
  'date': '2015',
  'decimal': '0',
  'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
  'value': '392168030'},
 {'country': {'id': '1A', 'value': 'Arab World'},
  'date': '2014',
  'decimal': '0',
  'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
  'value': '384356146'},

.... 17020-ish行之后......

{'country': {'id': 'XH', 'value': 'IDA blend'},
      'date': '1960',
      'decimal': '0',
      'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
      'value': '163861743'},
     ...]

我想使用 pandas 创建 DataFrame ,以便y轴=' id'和x轴='日期','值'是储值。我无法找到解决这个问题的最佳方法......

编辑: 想象一下只有数字的表格('值'来自数据集)。 x轴列将是提取日期,y轴行将是国家/地区ID(' id')。最终对象将是y * x大小的数据集。这些数字都是' float'。

编辑2: 该数据集代表1960年至2016年的约304个国家,因此数据集中大约有304 * 56 = 17024个条目。我需要存储'值' (关于每个国家和日期的条目2,值= 392168030)。

编辑3: 使用上述数据,将构造一个示例输出数据集:

        2016 .       2015 .       2014 .   ...       1960
1A .    None .  392168030    384356146 .   ...          w
...
XH .       x            y            z          163861743

2 个答案:

答案 0 :(得分:0)

我不得不猜测"成千上万的条目"可能看起来,但我想出了这个可能的解决方案。

entry1 = {
      'country': {'id': '1A', 'value': 'Arab World'},
      'date': '2016',
      'decimal': '0',
      'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
      'value': None
    }

entry2 = {
  'country': {'id': '1B', 'value': 'Another World'},
  'date': '2016',
  'decimal': '0',
  'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
  'value': None
}

entries = [entry1, entry2]

countries_index = []
date_cols = []

countries_index = []
date_cols = []
for entry in entries:
    date_cols.append(entry['date'])
    countries_index.append(entry['country']['id'])

import pandas as pd

df = pd.DataFrame(date_cols, columns=['date'], index=countries_index)

这会创建一个数据框df,看起来像这样......

    date
1A  2016
1B  2016

答案 1 :(得分:0)

首先从原始数据集中提取信息:

dataset = [{'country': {'id': '1A', 'value': 'Arab World'},
           'date': '2016',
           'decimal': '0',
           'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
           'value': None},
           {'country': {'id': '1A', 'value': 'Arab World'},
           'date': '2015',
           'decimal': '0',
           'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
           'value': '392168030'},
           {'country': {'id': '1A', 'value': 'Arab World'},
           'date': '2014',
           'decimal': '0',
           'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
           'value': '384356146'},
           {'country': {'id': 'XH', 'value': 'IDA blend'},
           'date': '1960',
           'decimal': '0',
           'indicator': {'id': 'SP.POP.TOTL', 'value': 'Population, total'},
           'value': '163861743'}]

df = [[entry['country']['id'], entry['date'], entry['value']] for entry in dataset]
df = pd.DataFrame(df, columns=['id','date','value'])

然后转动datafrme:

df = df.pivot(index='id',columns='date',values='value')

输出:

date       1960       2014       2015  2016
id                                         
1A         None  384356146  392168030  None
XH    163861743       None       None  None