#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')