Python 是否有更好的方法(理想情况下使用单循环)

Python 是否有更好的方法(理想情况下使用单循环),python,pandas,loops,dataframe,cryptocurrency,Python,Pandas,Loops,Dataframe,Cryptocurrency,我正在尝试创建一个熊猫数据框架,其中包含按日期索引的加密货币总市值。数据来自CoingeckoAPI。我能够通过以下方式实现这一目标: import requests import json r = requests.get('https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=200') response = json.loads(r.content) #suppresse

我正在尝试创建一个熊猫数据框架,其中包含按日期索引的加密货币总市值。数据来自CoingeckoAPI。我能够通过以下方式实现这一目标:

import requests
import json

r = requests.get('https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=200')
response = json.loads(r.content)

#suppresses scientific notation
pd.set_option('display.float_format','{:.2f}'.format)

marketcapdf = df(columns=['dates', 'marketcap','volume'])

dates = []
for values in response['prices']:
    dates.append(values[0])

totalmktcap = []
for values in response['market_caps']:
    totalmktcap.append(values[1])

dailymktvolume = []
for values in response['total_volumes']:
    dailymktvolume.append(values[1])

marketcapdf =  df(dates, columns=['Dates'])
marketcapdf = marketcapdf.assign(Total_Marketcap=totalmktcap)
marketcapdf = marketcapdf.assign(Daily_volume=dailymktvolume)

print (marketcapdf)
这将产生正确的数据帧:

             Dates  Total_Marketcap   Daily_volume
0    1566518400000  181311699889.67 20144228964.47
1    1566604800000  187878412535.86 18313019852.75
2    1566691200000  181764456091.20 21187546608.00
3    1566777600000  180491202154.33 17899166778.01
4    1566864000000  184989701185.55 23392461462.61
..             ...              ...            ...
196  1583452800000  165070261612.79 38122635173.15
197  1583539200000  166791067805.43 41388087588.44
198  1583625600000  162543409238.00 36764763103.12
199  1583712000000  147076617271.69 39132209137.70
200  1583767255000  142178026150.74 50332115525.77

我想知道是否有更好的方法,非常确定通过列表元素访问在一个for循环中完成所有事情是可能的。但我需要你的帮助来解决这个问题。 如果要检查API响应,只需转到

,您可以使用直接传递给构造函数:

import requests
import json
import pandas as pd

r = requests.get('https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=200')
response = json.loads(r.content)

marketcapdf = pd.DataFrame({
    'Dates': [x[0] for x in response['prices']],
    'Total_Marketcap': [x[1] for x in response['market_caps']],
    'Daily_volume': [x[1] for x in response['total_volumes']]})

或者,在一次阅读中使用
zip

marketcapdf = pd.DataFrame([(p[0], m[1], v[1])
                            for p, m, v in zip(*response.values())],
                           columns=['Dates', 'Total_Marketcap', 'Daily_volume'])
marketcapdf
[外]


你可以使用
zip
,但你拥有的很好。thx很多,这正是我想要的。作为一个新手,我发现写代码最困难的事情是知道我写的东西是否有效。关于如何处理这个问题有什么一般性的建议吗?:)养成将一些代码发布到的习惯。这是另一个stackexchange站点,您得到的任何反馈都是建设性的和友好的。这不是一个循环。这是三个循环。公正的评论。添加了1个循环的备选方案
             Dates  Total_Marketcap   Daily_volume
0    1566518400000  181311699889.67 20144228964.47
1    1566604800000  187878412535.86 18313019852.75
2    1566691200000  181764456091.20 21187546608.00
3    1566777600000  180491202154.33 17899166778.01
4    1566864000000  184989701185.55 23392461462.61
..             ...              ...            ...
196  1583452800000  165070261612.79 38122635173.15
197  1583539200000  166791067805.43 41388087588.44
198  1583625600000  162543409238.00 36764763103.12
199  1583712000000  147076617271.69 39132209137.70
200  1583767255000  142178026150.74 50332115525.77

[201 rows x 3 columns]