2017-08-23 26 views
3

我有我已經從具有6個鍵一個JSON URL中提取的字典。我的興趣只在'value'的關鍵值。該數據的結構是這樣的:提取密鑰,從字典值作爲數據幀

[in] print(data) 
    [out] ...'values': [{'x': 1230940800, 'y': 0}, 
{'x': 1231113600, 'y': 0}, 
{'x': 1231286400, 'y': 0}, 
{'x': 1231459200, 'y': 0}, 
{'x': 1231632000, 'y': 0}, 
{'x': 1231804800, 'y': 0}, 
{'x': 1231977600, 'y': 0}, 
{'x': 1232150400, 'y': 0}, 
{'x': 1232323200, 'y': 0}, 
{'x': 1232496000, 'y': 0}, 
{'x': 1232668800, 'y': 0}, 
{'x': 1232841600, 'y': 0}, 
{'x': 1233014400, 'y': 0}, 
{'x': 1233187200, 'y': 0}, 
{'x': 1233360000, 'y': 0}] 

哪裏'x'是Unix時間戳和'y'是當時的價值。 我怎麼能提取從'value'字典中的值,並重新調整他們,使'x'標記爲'date'和結構化的格式爲:2011-09-13

回答

3

假設你分配什麼是保持'values'到一個名爲lst(如lst = data['value']),你可以使用這個變量:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'Date': np.array([subdct['x'] for subdct in lst], dtype='datetime64[s]'), 
        'y': [subdct['y'] for subdct in lst]}) 

有了:

lst = [{'x': 1230940800, 'y': 0}, 
     {'x': 1231113600, 'y': 0}, 
     {'x': 1231286400, 'y': 0}, 
     {'x': 1231459200, 'y': 0}, 
     {'x': 1231632000, 'y': 0}, 
     {'x': 1231804800, 'y': 0}, 
     {'x': 1231977600, 'y': 0}, 
     {'x': 1232150400, 'y': 0}, 
     {'x': 1232323200, 'y': 0}, 
     {'x': 1232496000, 'y': 0}, 
     {'x': 1232668800, 'y': 0}, 
     {'x': 1232841600, 'y': 0}, 
     {'x': 1233014400, 'y': 0}, 
     {'x': 1233187200, 'y': 0}, 
     {'x': 1233360000, 'y': 0}] 

這給了我這個df

  Date y 
0 2009-01-03 0 
1 2009-01-05 0 
2 2009-01-07 0 
3 2009-01-09 0 
4 2009-01-11 0 
5 2009-01-13 0 
6 2009-01-15 0 
7 2009-01-17 0 
8 2009-01-19 0 
9 2009-01-21 0 
10 2009-01-23 0 
11 2009-01-25 0 
12 2009-01-27 0 
13 2009-01-29 0 
14 2009-01-31 0 
+0

'btc_usd2 = pd.DataFrame({ '日期':np.array([subdct [ 'X']用於btc_usd1 subdct],D型細胞= 'datetime64 [s]的'), 'Y':[subdct ['Y '] for subdct in btc_usd1]})'TypeError:字符串索引必須是整數 – zsad512

+0

'btc_usd = json.loads(url.read()。decode()) btc_usd1 = pd.DataFrame(btc_usd)'在代碼之前剛剛複製 – zsad512

+0

我並不是說你應該使用'DataFrame'作爲'lst'變量。然後我的代碼運行 - 如果你使用'LST = btc_usd [ '值']'(而不是'btc_usd1'!從'btc_usd')會發生什麼? – MSeifert

2

如果我理解正確的話,大熊貓應該能夠將其轉換爲一個數據幀:

df = pd.DataFrame(values_dictionary).rename(columns={'x':'Date'}) 

,那麼你可以使用to_datetime將其轉換爲YYYY/MM/DD格式:

df['Date'] = pd.to_datetime(df['Date'].astype(str), unit='s') 

輸出:

Date  y 
0 2009-01-03 0 
1 2009-01-05 0 
2 2009-01-07 0 
3 2009-01-09 0 
4 2009-01-11 0 
5 2009-01-13 0 
6 2009-01-15 0 
7 2009-01-17 0 
8 2009-01-19 0 
9 2009-01-21 0 
10 2009-01-23 0 
11 2009-01-25 0 
12 2009-01-27 0 
13 2009-01-29 0 
14 2009-01-31 0 
+0

這是接近,但不起作用。我能夠將'值'字典提取到一個數據框中,但是我需要'x'和'y'作爲單獨的列。 – zsad512

+0

我想我不是很瞭解你的意思。創建的數據框df有兩列:date和y。日期是x,但我根據您的指示將其重新命名。 – Vico

+2

這是一個很好的答案。一行如果這意味着什麼'pd.DataFrame(LST).rename(列=字典(X = '日期'))分配。(日期=拉姆達d:pd.to_datetime(d.Date,單元= 'S')) ' – piRSquared

0

我不知道你爲什麼會想一本字典,如果你想要的是d阿泰。你可以做到這一點,只是得到日期的列表。

import datetime 
dates = [datetime.datetime.fromtimestamp(xydict['x']).strftime("%Y-%m-%d") for xydict in values] 

編輯:如果您希望此相似的字典格式:

import datetime 
dates = [{'date' : datetime.datetime.fromtimestamp(xydict['x']).strftime("%Y-%m-%d")} for xydict in values] 
+0

我想要的鍵(這是日期)和相應的值。 – zsad512

+0

您能否提供您想要獲得的示例輸出? –