在庞大的数据集上循环函数



一个(已定义的(函数将ISIN(金融中的唯一标识符(作为输入,并通过查看特定的内部web应用程序获得相应的RIC(另一个标识符(作为输出,该应用程序中的数据以表格形式提供。该网站的关键限制是一次不能接受超过500个输入ID。因此,当输入500个或更少数量的ISIN作为输入时,它从网站返回包含500个输入ISIN及其相应RIC代码的数据帧。

任务是将一个包含30k个ISIN的csv作为输入,并将它们以500个ID为一组进行批处理,这样它就可以通过函数,然后存储生成的输出(数据帧(。保持循环输入和递增追加输出。

有人能建议如何将30K的数据分解为500的大小,然后循环通过函数并存储所有结果吗?非常感谢!

.iloc是您想要使用的方法。

df.iloc[firstrow:lastrow , firstcol:lastcol]

如果你把它放在一个for循环中,比如

for x in range (0, 30000, 50):
a = x #first row
b = x+50 #last row
thisDF = bigdf.iloc[a:b , firstcol:lastcol]

尝试并在代码中实现它。你应该用你尝试过的一些代码来提问,这样你就能得到更好的帮助。

假设您以熊猫系列的形式读取.csv文件(例如,通过使用以下内容:pd.Series.from_csv('ISINs.csv')(,或者您有一个列表,您可以将这些文件拆分为:

import pandas as pd
import numpy as np
# mock series of ISINs
isins = pd.Series(np.arange(0, 30002, 1))
data = pd.DataFrame()
for i in range(0, len(isins)//500):
isins_for_function = isins.iloc[i*500: i*500+500]
# if you have a list instead of a series, you will need to split it like this instead
isins_for_function = isins[i*500: i*500+500]
df = func(isins_for_function)

data = pd.concat([data, df])
# for Series
df = func(isins.iloc[-(len(isins)%500):]
# for list
df = func(isins[-(len(isins)%500):]
data = pd.concat([data, df])

这将把您的数据帧连接到data中。isins是您的isin系列/列表。对于最后一个500块之后的任何索引值,都需要在for循环之后的最后一位(在上面的系列中,它有30002行,最后两个不包括在500块中,因此仍然需要输入到函数func中(。

最新更新