Как получить доступ к определенным значениям внутри строки в Python - PullRequest
0 голосов
/ 04 октября 2019

Мне нужно извлечь только определенное значение элемента внутри строки. Ниже приведен код, который я использовал для получения данных AdsInsight с помощью Facebook AdsInsight API.

class LibFacebook:
    def __init__(self, app_id, app_secret, access_token, ad_account_id):
        FacebookAdsApi.init(app_id, app_secret, access_token)
        self.account = AdAccount(ad_account_id)
      #get ads insight
        insights = self.account.get_insights(fields=[
        AdsInsights.Field.campaign_id,
        AdsInsights.Field.actions,
], params={
        'level': AdsInsights.Level.campaign,
        })
        print(insights)

Вывод

<AdsInsights> {
    "campaign_id": "23843294609751234",
    "actions": [
        {
            "action_type": "post_reaction",
            "value": "1"
        },
        {
            "action_type": "landing_page_view",
            "value": "78"
        },
        {
            "action_type": "link_click",
            "value": "163"
        }
       ]

Вопрос : Наряду со значением campaign_id (23843294609751234) мне нужно значение только landing_page_view т.е. 78 (а не другие предметы действия) и поместите его в df. Как получить к ним доступ?

Дополнительная информация: AdsInsights.Field.actions имеет тип string.

type(AdsInsights.Field.actions)

str

1 Ответ

1 голос
/ 04 октября 2019

надеюсь, что это сработает, давайте возьмем ваши данные в список AdsInsights объектов

obj = [{
    "campaign_id": "23843294609751234",
    "actions" : [

            {
                "action_type": "post_reaction",
                "value": "1"
            },
            {
                "action_type": "landing_page_view",
                "value": "78"
            },
            {
                "action_type": "link_click",
                "value": "163"
            }
           ]
},

 {
    "campaign_id": "112233",
    "actions" : [

            {
                "action_type": "post_reaction",
                "value": "1"
            },
            {
                "action_type": "landing_page_view",
                "value": "100"
            },
            {
                "action_type": "link_click",
                "value": "163"
            }
           ]
}]

, вы можете получить такой результат

result_arr = []
for i in obj:
    datadict = {}  
    datadict["campaign_id"] = i.get("campaign_id")
    for action in i.get("actions"):
        if action.get("action_type") == "landing_page_view":
            datadict["value"]= action.get("value")
            result_arr.append(datadict)

result_arr будет

[{'campaign_id': '23843294609751234', 'value': '78'},
 {'campaign_id': '112233', 'value': '100'}]

следующее преобразование списка словарей в кадр данных

df=pd.DataFrame(result_arr)
...