首页 > 解决方案 > 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 方面的新手。

先感谢您。

标签: pythonpandasapiparsing

解决方案


我不认为有一个单一的解决方案,但我相信它可以简化一点。

# 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


推荐阅读