如何处理pycoingecko获取的比特币数据,转换时间戳并输出指定4列结果
解决方法
你调用接口返回的bdata字典中,prices、market_caps、total_volumes三个键对应的值都是二维列表,每个子列表第一个元素是毫秒级时间戳,第二个是对应的指标数值,不能直接把整个字典转DataFrame处理,修正后的完整代码如下:
import pandas as pd from pycoingecko import CoinGeckoAPI c = CoinGeckoAPI() # 拉取比特币近30天的行情数据 bdata = c.get_coin_market_chart_by_id(id='bitcoin', vs_currency='usd', days=30) # 分别将三个指标的二维列表转为DataFrame df_prices = pd.DataFrame(bdata['prices'], columns=['Timestamp', 'Prices']) df_mcaps = pd.DataFrame(bdata['market_caps'], columns=['Timestamp', 'Market_caps']) df_volume = pd.DataFrame(bdata['total_volumes'], columns=['Timestamp', 'Total_volume']) # 按时间戳字段合并三个表,得到所有字段 df = df_prices.merge(df_mcaps, on='Timestamp').merge(df_volume, on='Timestamp') # 将时间戳转为datetime格式 df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='ms') # 按时间升序排序,重置索引(接口默认返回升序,本步骤用于兜底避免异常) df = df.sort_values('Timestamp', ascending=True).reset_index(drop=True) # 查看前5行结果 print(df.head()) # 如果需要导出为csv文件可以打开下面注释 # df.to_csv('bitcoin_30d_data.csv', index=False)
运行后输出的结果就包含你需要的4列,时间格式也完成转换,默认按时间从早到晚排序,如果需要从晚到早排序,把sort_values里的ascending=True改成ascending=False即可。
内容的提问来源于stack exchange,提问作者Akhil Antony
相关产品推荐
相关产品推荐

