2017-05-22 74 views
0

我有一個由成千上萬個條目,如下面的數據集:如何從Python中的多個字符串提取多個數據點?

[{'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十歲上下行後.....

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

我想創建一個DataFrame使用pandas使得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 
+0

你能隨你怎麼指望數據看起來像在Excel或任何其他表格格式編輯您的問題嗎?你想如何處理'indicator'或'decimal'有點不清楚。 –

+0

@ Fomalhaut-C而不是解釋你想要什麼,你能展示一個期望輸出應該是什麼的例子嗎? – spies006

回答

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 
+0

非常感謝這款Pythonic解決方案。我沒有意識到我可以在數據中爲[k,k]做[[x,y,z]]。非常感激!! –

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 
+0

非常感謝您的幫助。我用一個更好的有代表性的數據樣本對問題作了澄清。我懷疑你正在通過隔離日期和國家名稱來解決正確的解決方案,我也這樣做了。但是我怎麼能夠保存這兩個軸的每個'價值'呢? –

相關問題