У меня есть фрейм данных pandas, содержащий данные организации, строку org_string (название компании) которой я передаю в API (дом британских компаний) и извлекаю словарь, содержащий зарегистрированный идентификатор компании.API находится в бета-версии и часто возвращает 502 HTTPError.В тот момент, когда возникает ошибка, я сохраняю фрейм данных, чтобы не терять прогресс.
Функция для выполнения запроса API:
def get_org_id(df):
s = chwrapper.Search(access_token=config.api_key)
org_strings = df['org_string']
org_id = {}
while True:
try:
for chunk in np.array_split(org_strings, math.ceil(len(org_strings)/600), axis=0):
print("\nProcessing companies house batch of size: " + str(len(chunk)))
# For each org_string in the sub-array of org_strings, pull org data from companies house
for word in chunk:
r = s.search_companies(word)
comp_house_dict = r.json()
# r returns a nested dict with complete info on the org. Below pulls just the ID number.
org_id[word] = comp_house_dict['items'][0]['company_number']
org_id.update(org_id)
except HTTPError:
return org_ig
# Save progress
save_adjusted_data(df, df_name)
continue
break
return org_id
Моя цель - перезапустить программу и продолжить захват идентификаторов.Какой лучший способ продолжить отсюда?До сих пор я исследовал следующее, чтобы создать две новые временные df: одну с завершенными идентификаторами, а другую только с пустыми строками 'connected_id' и применить ту же функцию, что и раньше.Затем я бы слил их вместе, что-то вроде:
if 'obtained_id' in df:
# Split df into blank and non blank ids:
isnull = df.obtained_id.isnull()
notnull = df.obtained_id.notnull()
empty_id_df = df[isnull]
filled_id_df = df[notnull]
org_strings = empty_id_df['org_string']
Затем вернул org_strings и передал это функции выше.Это кажется запутанным - есть ли лучший способ сделать это?Я думал об использовании yield / Generators, но пока это не для меня, и я не уверен, стоит ли тратить время на изучение этого процесса.
Спасибо