2014-10-27 136 views
0

我正在從地下天氣下載的歷史氣象數據中創建一個熊貓數據框。熊貓數據幀索引從字典中的嵌套值

import json 
import requests 
import pandas as pd 
import numpy as np 
import datetime 
from dateutil.parser import parse 
address = "http://api.wunderground.com/api/7036740167876b59/history_20060405/q/CA/San_Francisco.json" 
r = requests.get(address) 
wu_data = r.json() 

因爲我不需要所有的數據,我只使用觀察列表。該列表包含兩個元素 - date和utcdate - 實際上是字典。

df = pd.DataFrame.from_dict(wu_data["history"]["observations"]) 

我想索引我創建的數據框與解析日期從字典中的'漂亮'鍵。我可以通過使用數組索引來訪問此值,但我無法弄清楚如何在沒有循環的情況下直接執行此操作。例如,第23元素,我可以寫

pretty_date = df["date"].values[23]["pretty"] 
print pretty_date 
time = parse(pretty_date) 
print time 

我也得到

11:56 PM PDT on April 05, 2006 
2006-04-05 23:56:00 

這就是我此刻的

g = lambda x: parse(x["pretty"]) 
df_dates = pd.DataFrame.from_dict(df["date"]) 
df.index = df_date["date"].apply(g) 

DF現在重建索引做。在這一點上,我可以刪除我不需要的列。

有沒有更直接的方法來做到這一點?

請注意,有時在同一日期有多個觀測值,但我在代碼的不同部分處理數據清理,重複等。

回答

1

由於dtype保存在pretty只是對象,您可以簡單地將它們抓到列表並獲得索引。不知道這是你想要的:

# by the way, `r.json` should be without()` 
wu_data = r.json 
df = pd.DataFrame.from_dict(wu_data["history"]["observations"]) 

# just index using list comprehension, getting "pretty" inside df["date"] object. 
df.index = [parse(df["date"][n]["pretty"]) for n in range(len(df))] 

df.index 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2006-04-05 00:56:00, ..., 2006-04-05 23:56:00] 
Length: 24, Freq: None, Timezone: None 

希望這會有所幫助。

+0

整潔!謝謝,它確實有幫助。 – Rojj 2014-10-27 11:41:11