在Python Pandas中将数据从API保存到csv

2024-06-08 01:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助保存我用API密钥读取的数据到csv。我的代码如下:

import requests
import pandas as pd
def get_precip(gooddate):
    urlstart = 'http://api.wunderground.com/api/API_KEY/history_'
    urlend = '/q/Switzerland/Zurich.json'
    url = urlstart + str(gooddate) + urlend
    data = requests.get(url).json()

    for summary in data['history']['dailysummary']:
        abc = ','.join((gooddate,summary['date']['year'],summary['date']['mon'],summary['date']['mday'],summary['precipm'], summary['maxtempm'], summary['meantempm'],summary['mintempm']))
        df = pd.DataFrame(data=abc)
        df.to_csv('/home/user/Desktop/2013_weather.csv', index=False)

if __name__ == "__main__":
    from datetime import date
    from dateutil.rrule import rrule, DAILY

    a = date(2013, 1, 1)
    b = date(2013, 12, 31)

    for dt in rrule(DAILY, dtstart=a, until=b):
        get_precip(dt.strftime("%Y%m%d"))

我确信这样做是行不通的,因为在转换成dataframe之前,它需要保存到某个列表或字典中,但这次不知道该怎么做。如果把它保存到列表中,它只会给我一行? 欢迎任何帮助。 谢谢。在


Tags: csvimportapidatagetdatesummaryrequests
1条回答
网友
1楼 · 发布于 2024-06-08 01:47:48

我认为您可以从get_precip返回元组,将它们附加到list并使用DataFrame构造函数:

def get_precip(gooddate):
    urlstart = 'http://api.wunderground.com/api/API_KEY/history_'
    urlend = '/q/Switzerland/Zurich.json'
    url = urlstart + str(gooddate) + urlend
    data = requests.get(url).json()

    for summary in data['history']['dailysummary']:
        return (gooddate,summary['date']['year'],summary['date']['mon'],summary['date']['mday'],summary['precipm'], summary['maxtempm'], summary['meantempm'],summary['mintempm'])

^{pr2}$

什么是相同的:

    L = [get_precip(dt.strftime("%Y%m%d")) for dt in rrule(DAILY, dtstart=a, until=b)]

    cols = ['date','date.year','date.mon','date.mday','precipm','maxtempm', 
            'meantempm','mintempm']     
    df = pd.DataFrame(L, columns=cols)
    print (df.head())

           date date.year date.mon date.mday precipm maxtempm meantempm mintempm
    0  20130101      2013       01        01     0.0        7         2       -2
    1  20130102      2013       01        02     0.0        5         2       -3
    2  20130103      2013       01        03     0.0        4         0       -3
    3  20130104      2013       01        04     0.0        7         5        3

   df.to_csv('/home/user/Desktop/2013_weather.csv', index=False)

相关问题 更多 >

    热门问题