Сохранение в виде DataFrame после цикла в Tweepy, работает без цикла, после добавления цикла сохраняет как список

1

Проблема: перетаскивание временных шкал нескольких пользователей в твиттер для сохранения в виде DataFrame.

Вот решение, которое отлично работает для одного пользователя за раз:

import tweepy
import pandas as pd
import numpy as np

ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""
CONSUMER_KEY = ""
CONSUMER_SECRET = ""

# OAuth process, using the keys and tokens
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# Creation of the actual interface, using authentication
api = tweepy.API(auth, wait_on_rate_limit=True)


# Running only on handle returns a dataframe 
tweets = api.user_timeline(screen_name='pycon', count=10)
print("Number of tweets extracted: {}.\n".format(len(tweets)))
data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns= ['Tweets'])
data['len']  = np.array([len(tweet.text) for tweet in tweets])
data['ID']   = np.array([tweet.id for tweet in tweets])
data['Date'] = np.array([tweet.created_at for tweet in tweets])
data['Source'] = np.array([tweet.source for tweet in tweets])
data['Likes']  = np.array([tweet.favorite_count for tweet in tweets])
data['RTs']    = np.array([tweet.retweet_count for tweet in tweets])

print(data)

Вышеописанное прекрасно работает и вернет пользователю pycon 10 самых последних твитов в DataFrame. Следующим шагом является добавление нескольких дескрипторов для запроса. Вот код для выполнения одной и той же вещи с несколькими дескрипторами:

#Added list of handles
handles = ['pycon', 'gvanrossum']
#Added Empty DF to fill
test = []
#Added loop
for handle in handles:
    tweets = api.user_timeline(screen_name=handle, count=10)
    print("Number of tweets extracted: {}.\n".format(len(tweets)))
    data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])
    data['len']  = np.array([len(tweet.text) for tweet in tweets])
    data['ID']   = np.array([tweet.id for tweet in tweets])
    data['Date'] = np.array([tweet.created_at for tweet in tweets])
    data['Source'] = np.array([tweet.source for tweet in tweets])
    data['Likes']  = np.array([tweet.favorite_count for tweet in tweets])
    data['RTs']    = np.array([tweet.retweet_count for tweet in tweets])
    test.append(data)

print(test)

Запуск этого даст два выхода. data будет DataFrame с 10 последними твитами gvanrossum (будучи вторым дескриптором в списке дескрипторов, это имеет смысл). Вторым выводом будет test, который представляет собой список. Интересно, что в test есть все 20 твитов из pycon и gvansossum, но в виде списка. Цикл работает, но он не сохраняется как DataFrame.

Вопрос: Как сохранить этот цикл между несколькими дескрипторами как DataFrame?

Теги:
pandas
numpy
loops
tweepy

1 ответ

1

Если вы хотите хранить данные в одной базе данных

merged=pd.DataFrame()
#Added loop
for handle in handles:
    tweets = api.user_timeline(screen_name=handle, count=10)
    print("Number of tweets extracted: {}.\n".format(len(tweets)))
    data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])
    data['len']  = np.array([len(tweet.text) for tweet in tweets])
    data['ID']   = np.array([tweet.id for tweet in tweets])
    data['Date'] = np.array([tweet.created_at for tweet in tweets])
    data['Source'] = np.array([tweet.source for tweet in tweets])
    data['Likes']  = np.array([tweet.favorite_count for tweet in tweets])
    data['RTs']    = np.array([tweet.retweet_count for tweet in tweets])
    #created new column handle to identify the source of tweet. Can comment if you do not need.
    data.loc['Handle',:]=handle
    #merging the data frames
    merged=pd.concat([merged,data])
print(merged)
  • 0
    Правильно, но это противоречит цели цикла. Если у меня есть ручки. Это решение будет следующим: df_handle0 = test[0] , df_handle1 = test[1] , df_handle2 = test[2] , ... , df_handlen = test[n] . Это слишком громоздко и трудно изменить, если я хочу добавить или удалить маркеры.
  • 0
    Вам не нужно это делать. Я говорю, что он будет сохранен как список данных в тестовой переменной. Я просто показал вам, как получить к нему доступ. Если у вас есть 10 переменных, вы можете получить доступ к каждой из них, проанализировав тест списка.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню