Home > database >  how to write specific column from api to pandas dataframe
how to write specific column from api to pandas dataframe

Time:05-23

I use API, got many data but need to write only one to Pandas dataframe and then to csv file how can i do this? i need currency and rate columns only


import requests
import pandas as pd

url = 'https://api.apilayer.com/exchangerates_data/latest?base=EUR'

get_response = requests.get(url)

print(get_response.content)

reponse is


b'{\n    "success": true,\n    "timestamp": 1653291723,\n    "base": "EUR",\n    "date": "2022-05-23",\n    "rates": {\n        "AED": 3.891874,\n        "AFN": 96.332724,\n        "ALL": 120.12076,\n        "AMD": 486.326147,\n        "ANG": 1.910798,\n        "AOA": 440.146399,\n        "ARS": 125.559742,\n        "AUD": 1.49136,\n        "AWG": 1.907774,\n        "AZN": 1.796984,\n        "BAM": 1.958501,\n        "BBD": 2.140687,\n        "BDT": 92.747171,\n        "BGN": 1.955884,\n        "BHD": 0.399459,\n        "BIF": 2179.202426,\n        "BMD": 1.05958,\n        "BND": 1.461113,\n        "BOB": 7.300355,\n        "BRL": 5.170217,\n        "BSD": 1.060231,\n        "BTC": 3.4686139e-05,\n        "BTN": 82.245346,\n        "BWP": 12.83561,\n        "BYN": 3.578179,\n        "BYR": 20767.765076,\n        "BZD": 2.137314,\n        "CAD": 1.355568,\n        "CDF": 2124.457448,\n        "CHF": 1.030337,\n        "CLF": 0.032122,\n        "CLP": 886.340415,\n        "CNY": 7.067924,\n        "COP": 4208.651167,\n        "CRC": 711.74061,\n        "CUC": 1.05958,\n        "CUP": 28.078866,\n        "CVE": 110.417129,\n        "CZK": 24.584356,\n        "DJF": 188.746891,\n        "DKK": 7.440804,\n        "DOP": 58.552672,\n        "DZD": 154.438592,\n        "EGP": 19.350685,\n        "ERN": 15.893699,\n        "ETB": 55.044138,\n        "EUR": 1,\n        "FJD": 2.284134,\n        "FKP": 0.867087,\n        "GBP": 0.843796,\n        "GEL": 3.078048,\n        "GGP": 0.867087,\n        "GHS": 8.244159,\n        "GIP": 0.867087,\n        "GMD": 57.376242,\n        "GNF": 9372.913662,\n        "GTQ": 8.136894,\n        "GYD": 221.832492,\n        "HKD": 8.316976,\n        "HNL": 26.044688,\n        "HRK": 7.531387,\n        "HTG": 118.758621,\n        "HUF": 382.210602,\n        "IDR": 15541.387462,\n        "ILS": 3.544575,\n        "IMP": 0.867087,\n        "INR": 82.241939,\n        "IQD": 1547.570278,\n        "IRR": 44820.228002,\n        "ISK": 138.696976,\n        "JEP": 0.867087,\n        "JMD": 163.866665,\n        "JOD": 0.751235,\n        "JPY": 135.279211,\n        "KES": 123.494294,\n        "KGS": 84.628222,\n        "KHR": 4306.032696,\n        "KMF": 494.770756,\n        "KPW": 953.622101,\n        "KRW": 1339.844028,\n        "KWD": 0.324317,\n        "KYD": 0.883605,\n        "KZT": 451.435581,\n        "LAK": 14057.368731,\n        "LBP": 1603.386389,\n        "LKR": 376.408573,\n        "LRD": 161.585115,\n        "LSL": 16.867967,\n        "LTL": 3.128664,\n        "LVL": 0.640929,\n        "LYD": 5.0991,\n        "MAD": 10.616176,\n        "MDL": 20.305389,\n        "MGA": 4285.919145,\n        "MKD": 61.538618,\n        "MMK": 1962.989296,\n        "MNT": 3259.024764,\n        "MOP": 8.570086,\n        "MRO": 378.269824,\n        "MUR": 45.988019,\n        "MVR": 16.344051,\n        "MWK": 866.149081,\n        "MXN": 21.058086,\n        "MYR": 4.645208,\n        "MZN": 67.632728,\n        "NAD": 16.868837,\n        "NGN": 439.852629,\n        "NIO": 37.997351,\n        "NOK": 10.249848,\n        "NPR": 131.573277,\n        "NZD": 1.638153,\n        "OMR": 0.40741,\n        "PAB": 1.060346,\n        "PEN": 3.9603,\n        "PGK": 3.736248,\n        "PHP": 55.384769,\n        "PKR": 213.235927,\n        "PLN": 4.617629,\n        "PYG": 7251.300917,\n        "QAR": 3.857965,\n        "RON": 4.946967,\n        "RSD": 117.499439,\n        "RUB": 62.329807,\n        "RWF": 1088.946708,\n        "SAR": 3.974436,\n        "SBD": 8.607563,\n        "SCR": 14.438411,\n        "SDG": 473.497309,\n        "SEK": 10.486142,\n        "SGD": 1.457722,\n        "SHP": 1.459462,\n        "SLL": 13581.160767,\n        "SOS": 618.272012,\n        "SRD": 22.260709,\n        "STD": 21931.163629,\n        "SVC": 9.277651,\n        "SYP": 2662.141945,\n        "SZL": 16.788471,\n        "THB": 36.311502,\n        "TJS": 13.261298,\n        "TMT": 3.708529,\n        "TND": 3.243904,\n        "TOP": 2.459973,\n        "TRY": 16.843815,\n        "TTD": 7.198816,\n        "TWD": 31.379439,\n        "TZS": 2464.582977,\n        "UAH": 31.322712,\n        "UGX": 3864.924954,\n        "USD": 1.05958,\n        "UYU": 42.945451,\n        "UZS": 11764.462107,\n        "VEF": 226570195087.7927,\n        "VND": 24545.167244,\n        "VUV": 121.073594,\n        "WST": 2.73302,\n        "XAF": 656.781309,\n        "XAG": 0.048294,\n        "XAU": 0.000571,\n        "XCD": 2.863568,\n        "XDR": 0.790993,\n        "XOF": 656.781309,\n        "XPF": 120.315233,\n        "YER": 265.159952,\n        "ZAR": 16.77781,\n        "ZMK": 9537.495082,\n        "ZMW": 18.060768,\n        "ZWL": 341.18428\n    }\n}\n'

CodePudding user response:

first load data as DataFrame

import json
df = json.loads(get_response.content)

second, choose the rates (currency is index) and save to csv

df[["base","rates"]].to_csv("path/to/csv")

cheers :)

CodePudding user response:

import requests
import pandas as pd
import json
url = 'https://api.apilayer...'

get_response = requests.get(url)
# Parse the response to a dict
response_dict = get_response.json()
# Turn the rates nodes into a dataframe
data_items = response_dict['rates'].items()
data_list = list(data_items)
df = pd.DataFrame(data_list,columns=['currency','rate'])
# Export to csv
df.to_csv('export.csv')

CodePudding user response:

IIUC, you can use:

import json
df = pd.DataFrame(json.loads(get_response.content.decode('utf-8')))[['base', 'rates']]

# for export to csv
# df.to_csv('filename.csv')

output:

    base        rates
AED  EUR     3.893237
AFN  EUR    96.366461
ALL  EUR   120.162829
AMD  EUR   486.496485
ANG  EUR     1.911467
..   ...          ...
YER  EUR   265.252922
ZAR  EUR    16.796411
ZMK  EUR  9540.830787
ZMW  EUR    18.067093
ZWL  EUR   341.303769

[168 rows x 2 columns]

CodePudding user response:


get_response = requests.get(url)

# print(get_response.content)

in_json = get_response.json()

# print(in_json)

fd = pd.DataFrame(in_json)

y = fd[['rates']]

print(y)

solved but looks not nice and maybe there a more simple solution i converted to json - then to dataframe - then i will convert to csv

  • Related