Я получаю Filed.actions по API, но иногда я получаю KeyError: "['..']" нет в предупреждающем сообщении индекса - PullRequest
0 голосов
/ 09 апреля 2020

Я использовал python, чтобы написать инструмент автоматизации, чтобы получать данные с нескольких платформ для моей базы данных и выводить индивидуальный отчет своему партнеру каждый день. Однако я столкнулся с одной проблемой: иногда я получаю предупреждение
"KeyError:" ['omni_complete_registration', 'omni_complete_purchase'] "not in index" при использовании API маркетинга FB.

I причина в том, что эти два столбца не появляются в отчете за один день, когда я использую API для получения «AdsInsights.Field.actions».

Сначала я использовал pandas, чтобы извлечь больше столбцов из «AdsInsights». Field.actions "и удалить столбцы" действия ". Во-вторых, я переиндексирую все столбцы, которые я получил, чтобы соответствовать порядку таблицы моей базы данных fb-insight. В этой части иногда возникали проблемы, когда указанный в моем коде столбец c, соответствующий размерам таблицы fb-insight-таблицы моего БД, не отображается в сегодняшнем столбце AdsInsights.Field.actions.

Я хочу, чтобы мой код мог пренебречь отсутствием указанных столбцов c или дать им значение NULL в качестве значения, если эти столбцы не отображены сегодня, и автоматически работать каждый день автоматически.

Вот часть моего кода: A. API_FB_insight

def createCsvResult(df_insights):
    for index, row in df_insights.iterrows():
        actions = row['actions']
        if type(actions) != float:
            for action in actions:
                df_insights.loc[index, action['action_type']] = str(action['value'])
    df_insights = df_insights.drop(['actions'], axis=1)
    df_insights["PlatForm"] = "Facebook"
    df_insights["Adv_Category"] = "Facebook_ads"
    df_insights["Plat_Rev"] = 0
    df_insights = df_insights[['PlatForm','date_start', 'date_stop', 'Adv_Category', \
    'account_id', 'account_name', 'campaign_id', 'campaign_name', \
    'adset_id', 'adset_name', 'ad_id', 'ad_name', \
    'impressions', 'inline_link_click_ctr', 'inline_link_clicks', \
    'spend', 'Plat_Rev', 'cpc', 'cpm' , 'omni_purchase' , \
    'omni_add_to_cart' ,  'omni_complete_registration']]

B.csvTofb

cursor = mydb.cursor()
mydb.set_character_set('utf8')
cursor.execute('SET NAMES utf8;')
cursor.execute('SET CHARACTER SET utf8;')
cursor.execute('SET character_set_connection=utf8;')
csv_data = csv.reader(open(csv_file))
row_count = 0
for row in csv_data:
    if row_count != 0:
        cursor.execute('INSERT IGNORE INTO fb_insight_report(PlatForm ,date_start , date_stop , Adv_Category, account_id , account_name , campaign_id , campaign_name ,adset_id , adset_name , ad_id , ad_name , impressions , inline_link_click_ctr , inline_link_clicks , spend , Plat_Rev, cpc , cpm , omni_purchase , omni_add_to_cart , omni_complete_registration) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' ,row)
    row_count += 1
mydb.commit()
cursor.close()

Плз, помогите разобраться с проблемой ie, искренне благодарю.

...