将API数据转换为str / int格式python的最简单方法

时间:2018-02-04 14:51:52

标签: pandas api formatting

我已阅读了许多文章和帖子以连接到api然后将其格式化为int / str但是我确实做了可能是最长的啰嗦方式它真正的丑陋请有人告诉我最短的最有效的方法来完成下面的代码任何建议将非常感谢贝斯寻找打印出str格式的“eos”和int的“价格”谢谢!

import urllib
import json

import pandas as pd
import numpy as np

import requests
r = requests.get('https://api.coinmarketcap.com/v1/ticker/eos/')

with open('events.csv','w') as fd:
    fd.write(r.text)

data = pd.read_csv('events.csv', names=['Choose One'])

i = data.iloc[[6], [0]]

a = str(i)

name,price = a.split(":")

string = price[2:-1]

print(string)

2 个答案:

答案 0 :(得分:1)

直接使用json.loads(r.text)或更轻松r.json()

说,现在api返回以下数据:

[
    {
        "id": "eos", 
        "name": "EOS", 
        "symbol": "EOS", 
        "rank": "9", 
        "price_usd": "9.31992", 
        "price_btc": "0.00106154", 
        "24h_volume_usd": "596467000.0", 
        "market_cap_usd": "6034993504.0", 
        "available_supply": "647537050.0", 
        "total_supply": "900000000.0", 
        "max_supply": "1000000000.0", 
        "percent_change_1h": "1.3", 
        "percent_change_24h": "-6.81", 
        "percent_change_7d": "-36.4", 
        "last_updated": "1517755757"
    }
]

如果您使用r.json(),则将其作为json使用,否则将其加载data = json.loads(r.text)并将其保存到带有df = pd.DataFrame(data)的pandas DataFrame,然后如下所示:

In [15]: df
Out[15]:
  24h_volume_usd available_supply   id last_updated market_cap_usd    max_supply name percent_change_1h percent_change_24h percent_change_7d   price_btc price_usd rank symbol total_supply
0    596467000.0      647537050.0  eos   1517755757   6034993504.0  1000000000.0  EOS               1.3              -6.81             -36.4  0.00106154   9.31992    9    EOS  900000000.0

使用pandas索引访问数据:

In [8]: df[['name', 'price_usd']]
Out[8]:
  name price_usd
0  EOS   9.29186

或打印:

In [18]: print df.loc[0, 'name'], ': ', df.loc[0, 'price_usd']
EOS :  9.31992

答案 1 :(得分:1)

使用pandas read_json将文件读入数据框更简单,read_json会自动将apt数据类型分配给每一列,然后使用列选择来选择' name&# 39;,' price_usd'列(当然,在这种情况下,只有一行,但相同的代码可以与多行一起使用)

import pandas as pd

df = pd.read_json('https://api.coinmarketcap.com/v1/ticker/eos/')

print(df[['name','price_usd']].apply(lambda row:'{}: {:.0f}'.format(ro
w['name'],row['price_usd']),axis=1))  

在format语句中使用.0f将显示price_usd值的整数部分(舍入),以便输出。

0    EOS: 9

或者使用round函数将舍入浮点值 即。

In [34]: import pandas as pd
    ...: df = pd.read_json('https://api.coinmarketcap.com/v1/ticker/eos/')
    ...: print(df[['name','price_usd']].apply(lambda row:'{}: {:}'.format(row['n
    ...: ame'],round(row['price_usd'],2)),axis=1))
    ...: 
    ...: 
0    EOS: 8.99

dtype:object