我已阅读了许多文章和帖子以连接到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)
答案 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