Saya memiliki kode ini yang menarik data dari Federal Reserve, melalui API mereka. Saya mencoba mencari cara untuk memiliki ID FRED berbeda yang dapat dihubungkan ke fungsi dan kemudian ditampilkan ke tabel data. Jadi, misalnya, saya akan memasukkan "CPIAUCSL" dan kemudian itu akan memberi saya daftar nilai, kemudian skrip akan memasukkan "A191RL1Q225SBEA" dan kemudian menambahkan nilai-nilai itu ke bagian bawah tabel data (sehingga nilai CPIAUCSL akan berada di atasnya). Saya mencoba melakukan ini dengan skrip di bawah ini, tetapi itu hanya akan menimpa nilai sebelumnya. Ada ide?

import pandas as pd  
from requests import request  
import json  
from requests import request  
from urllib.request import urlopen  
from pandas import ExcelWriter  

def fred_variables(fred_id_list):  
    main_url= "https://api.stlouisfed.org/fred/series/observations?series_id="  
    API= "&api_key=50ebfb4929a3fe603e3b369d51826822"  
    file= "&file_type=json"  
    descending= "&sort_order=desc"  
    max_return= "&limit=21"  
    final_URL= main_url + fred_id_list + API + file + descending + max_return
    page = urlopen(final_URL)  
    data1= page.read()  
    nested_json = json.loads(data1)  
    json_file = pd.DataFrame.from_dict(pd.json_normalize(nested_json, record_path="observations"))  
    df= json_file  
    df['fredID'] = str(fred_id_list)  
    df2 = df.drop(df.columns[[0, 1]], axis=1)  
    return df2  

    fred_id_list=["CPIAUCSL","A191RL1Q225SBEA"]  
    for x in fred_id_list:  
        print(x)  

fred_variables(x)  
```[enter image description here][1]


  [1]: https://i.stack.imgur.com/8Tglt.png
0
Steve10297 21 Mei 2020, 06:30

1 menjawab

Jawaban Terbaik

Saya membuat skenario palsu untuk Anda:

data = {
    'CPIAUCSL': [12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534],
    'A191RL1Q225SBEA': [65, 87, 23, 7, 23, 765, 23]
}

def fred_variables(fred_id):
    # processing code
    fake_result = data[fred_id]
    return fake_result

Pertimbangkan fungsi adalah fungsi Anda. Saya berasumsi Anda mengembalikan daftar item. Anda dapat menggunakan fungsi map Python untuk kasus penggunaan Anda. Suka:

fred_id_list = ["CPIAUCSL","A191RL1Q225SBEA"]
result = list(map(fred_variables, fred_id_list))
print(result)

Ini akan menghasilkan output berikut:

[[12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534], [65, 87, 23, 7, 23, 765, 23]]

Jika Anda dengan menggabungkan seluruh data ini menjadi satu daftar, Anda dapat melakukan hal berikut:

final_result = []
for res in result:
    final_result.extend(res)

print(final_result)

Hasil akhir akan seperti:

[12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534, 65, 87, 23, 7, 23, 765, 23]

Untuk Anda kasus tertentu

Sekarang sampai pada pertanyaan Anda, Anda mengembalikan Pandas DataFrame dari fungsi Anda. Jadi, apa yang perlu Anda lakukan:

fred_id_list = ["CPIAUCSL","A191RL1Q225SBEA"]
result = list(map(fred_variables, fred_id_list))

Di sini result akan menjadi daftar DataFrames. Anda dapat menggabungkan semua DataFrame ini dengan bantuan fungsi concat Pandas.

final_result = pd.concat(result)

Saya harap ini membantu. Terima kasih.

0
Atul Prakash Singh 21 Mei 2020, 04:01