【问题标题】:Pandas Dataframe index from nested values in dictionary字典中嵌套值的 Pandas Dataframe 索引
【发布时间】:2014-10-27 09:27:40
【问题描述】:

我正在根据从地下天气下载的历史天气数据创建熊猫数据框。

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 现在被重新索引。此时我可以删除不需要的列。

有没有更直接的方法来做到这一点?

请注意,有时同一日期有多个观察值,但我在代码的不同部分处理数据清理、重复等。

【问题讨论】:

    标签: python dictionary pandas


    【解决方案1】:

    由于pretty 中的dtype 只是对象,您可以简单地将它们抓取到一个列表中并获得索引。不确定这是否是您想要的:

    # 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
    

    希望这会有所帮助。

    【讨论】:

    • 整洁!谢谢,确实有帮助。
    猜你喜欢
    • 2022-01-01
    • 2022-01-02
    • 1970-01-01
    • 2016-07-24
    • 2020-02-18
    • 2019-12-01
    • 2017-12-26
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多