我正在尝试从cryptocompare api中提取超过1,000个硬币的每日OHLCV数据,并将这些数据写入csv文件;我设法编写了daily_OHLCV函数,如果我在单个硬币上调用该函数,它的性能也很好,例如daily_OHLCV('BTC','USD')。
但是,当我从一个csv文件中导入1000个硬币的行情清单并尝试使用for循环为列表中的每个行情清单调用daily_OHLCV函数时,代码不起作用并且出现错误消息说'DataFrame'对象没有属性'time',如果我手动将代码输入到标识符中就不会出现。如何解决此属性错误?
import requests
import datetime
import pandas as pd
import json
import csv
import os
import os.path
with open ('ICO-list.csv',"r")as f:
reader=csv.reader(f)
ico_ticker_list=[]
for row in reader:
ticker=row[2]
ico_ticker_list.append(ticker)
def daily_OHLCV(symbol, comparison_symbol, allData='true'):
url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&allData=true'\
.format(symbol.upper(), comparison_symbol.upper())
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
path=os.path.expanduser('~')
csvfile=os.path.join(path,'Desktop','Research','daily OHLCV','{}.csv'.format(symbol))
export_csv=df.to_csv(csvfile,na_rep='NA',index=None,header=True)
for item in ico_ticker_list:
daily_OHLCV(item,'USD')
如果有人可以帮助解决此问题以成功调用该函数并为ico_ticker_list中的所有代码生成相应的csv文件,则非常感谢
答案 0 :(得分:0)
在此行中,您尝试读取数据框
中的时间列df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
“ DataFrame”对象没有属性“ time”错误,这意味着您的数据框没有此列。
这可能是因为您的api响应没有与时间相关的特定数据字段。
在创建数据框之前检查api响应,并从df.columns
获取列名,并确认time列存在。