Цикл For, который добавляет строки к фрейму данных, начиная с вывода списка

#python #pandas

#python #pandas

Вопрос:

Я получил вывод из вызова API в виде списка:

 out = client.phrase_this(phrase='ciao', database='it')

out
    [{'Keyword': 'ciao',
    'Search Volume': '673000',
    'CPC': '0.05',
    'Competition': '0',
    'Number of Results': '205000000'}]

type(out)
    list
  

Я хотел бы создать dataframe и циклически добавлять к этому dataframe новую строку, начиная вывод API с нескольких ключевых слов.

 index = ['ciao', 'google', 'microsoft']

columns = ['Keyword', 'Search Volume', 'CPC', 'Competition', 'Number of Results']

df = pd.DataFrame(index=index, columns=columns)
  

Цикл For, который не работает:

 for keyword in index:
    df.loc[keyword] = client.phrase_this(phrase=index, database='it')
  

Спасибо!

Ответ №1:

Причина, по которой это не работает, заключается в том, что вы пытаетесь назначить словарь внутри списка строке фрейма данных, а не просто списку.

Ответ №2:

Вы получаете список, содержащий словарь. Если вы хотите использовать только первую запись этого списка, следующее решение должно работать:

 for keyword in index:
    df.loc[keyword] = client.phrase_this(phrase=keyword, database='it')[0].values()
  

[0] возвращает первую запись списка.

values() возвращает список всех значений в словаре. https://www.tutorialspoint.com/python/dictionary_values.htm

Ответ №3:

 for keyword in index:
  df.loc[keyword] = client.phrase_this(phrase=keyword, database='it')
  

Это передает ключевое слово функции phrase_this вместо всего списка индексов.

Комментарии:

1. Спасибо за ответ! Можете ли вы объяснить, почему это решение? Добавление объяснения помогает сделать это ответом, который поможет с подобными вопросами.

Ответ №4:

Спасибо за ответы, я нашел обходной путь:

 index = ['ciao', 'google', 'microsoft']
columns = ['Keyword', 'Search Volume', 'CPC', 'Competition', 'Number of Results']
out = []

for query in index:
out.append(client.phrase_this(phrase=query, database='it')[0].values())

out
    [dict_values(['ciao', '673000', '0.05', '0', '205000000']),
    dict_values(['google', '24900000', '0.66', '0', '13020000000']),
    dict_values(['microsoft', '110000', '0.12', '0.06', '77'])]

df = pd.DataFrame(out, columns=columns).set_index('Keyword')