使用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,这个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

给TA打赏
共{{data.count}}人
人已打赏
未分类

在线存储JSON文件的最简单方法?

2022-9-8 15:57:20

未分类

将相同的数据分组到一个单一的字典中,同时进行刮擦。

2022-9-8 15:57:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索