python - Pandas 的 For 循环:如何改进代码?
问题描述
我正在使用 API 来获取指数中股票的数据。API 有最大请求限制,所以我正在解析数据。在每一次传递中,我都附加了 API 返回的 Pandas DataFrame,这样最后我就有了一个带有完整索引的大数据框——这在一个请求中是不会被接受的。
以下是正确的:
# number of iterations
no_of_stocks = len(Mnemonics)
iterations = math.ceil(no_of_stocks / 50) - 1
# first iteration
string_mnemonics = ', '.join(Mnemonics[0:50])
stocks = ds.get_data(tickers= string_mnemonics, fields=['P'], start = '-1Y', end = '-0d', freq = 'D')
for i in range(iterations):
to_parse_mnemonics = Mnemonics[(i+1)*50 : (i+2)*50]
string = ', '.join(to_parse_mnemonics)
stocks_temp = ds.get_data(tickers= string, fields=['P'], start = '-1Y', end = '-0d', freq = 'D')
stocks = pd.concat([stocks, stocks_temp], axis = 1)
这对我来说看起来很笨拙。我的问题是:有没有办法只用一行代码发出请求。我认为 do-while 循环会起作用 - 或者定义一个灵活的 DataFrame ,它将完全在循环中定义。
我是编码和 Python 方面的新手。
先感谢您。
解决方案
我不认为有一个单一的解决方案,但我相信它可以简化一点。
# number of iterations
no_of_stocks = len(Mnemonics)
iterations = math.ceil(no_of_stocks / 50)
stocks = []
for i in range(iterations):
string = ', '.join(Mnemonics[i*50 : (i+1)*50])
stocks.append(ds.get_data(tickers=string, fields=['P'], start='-1Y', end='-0d', freq = 'D'))
stocks = pd.concat(stocks, axis=1)
另外我认为在连接时清除索引是一个好主意,因为之前的索引没有太多用处,所以你可以在ignore_index=True
调用时传入pd.concat
推荐阅读
- python - 我正在尝试使用数据框中的数据计算每个目标的分钟数,并且行打印错误
- python - 打开时下拉菜单未显示正确的表格
- regex - 将 url 重写为漂亮的 URL
- reactjs - 如何在 React 中使用动态路由?
- c# - 也可以托管在 Azure 中的 Windows 服务(或可以作为 Windows 服务工作的 Azure 组件)
- javascript - Apollo 中的 GraphQL 模式存在问题
- c# - 如何在 C# 中立即确认 Stripe 事件但仍对其进行处理?
- c# - 在 VS 2019 中创建 Api 控制器时出现代码生成错误
- javascript - 防止传播 - OnTouch 选择 - 材料反应
- php - 雄辩的haversine公式没有按预期工作