2014-10-27 113 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