如何使用Tweepy创建一个pandas数据框?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Tweepy创建一个pandas数据框?相关的知识,希望对你有一定的参考价值。
在Python 3中,我制作程序以在Twitter中提取帖子和喜欢:
import tweepy
import pandas as pd
consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
此函数接收配置文件的教学分类(仅适用于数据库组织)和配置文件的名称。它创建一个包含字典的列表,然后返回:
def linhadotempo(posicao, valor):
tela = api.user_timeline(valor)
bolha = []
for status in tela:
dicionario = {"nome": valor, "posicionamento": posicao, "posts_links": status.text, "curtidas": status.favorite_count}
bolha.append(dicionario)
return bolha
Twitter个人资料的名称列表及其教学评级。然后转换成数据帧:
data = {
'nome': ['jeanwyllys_real', 'lucianagenro', 'jairbolsonaro', 'MBLivre'],
'posicionamento': ['esquerda', 'esquerda', 'direita', 'direita']
}
perfis = pd.DataFrame(data, columns=['nome','posicionamento'])
perfis.reset_index()
index nome posicionamento
0 0 jeanwyllys_real esquerda
1 1 lucianagenro esquerda
2 2 jairbolsonaro direita
3 3 MBLivre direita
我创建了一个最终列表,将函数中创建的列表放在一起。我在配置文件的数据框中进行迭代以激活该功能
bolhas = []
for num, row in perfis.iterrows():
bolha = linhadotempo(row['posicionamento'], row['nome'])
bolhas.append(bolha)
我的意图是用这个创建一个最终的数据帧,但它没有成功。我的意图是列“curtidas”,“nome”,“posicionamento”和“posts_links”
bolhas_final = pd.DataFrame(bolhas)
bolhas_final.reset_index()
index 0 1 2 3 4 5 6 7 8 ... 10 11 12 13 14 15 16 17 18 19
0 0 {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ...
1 1 {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... ... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es...
2 2 {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... ... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd...
3 3 {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... ... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita...
通过显示“bolhas”的内容,我相信错误是append在列表中创建了几个列表:
[[{'curtidas': 122,
'nome': 'jeanwyllys_real',
'posicionamento': 'esquerda',
'posts_links': 'A expressão "ideologia de gênero" é uma farsa criada para combater a promoção da igualdade e perpetrar a violência… https:///lWdLANLzc5'},
{'curtidas': 316,
'nome': 'jeanwyllys_real',
'posicionamento': 'esquerda',
'posts_links': 'O termo fantasioso "ideologia de gênero" foi criado por aqueles que falam em "ditadura gay". Quando o ministro ileg… https:///zv2aY31X9p'},
...
[{'curtidas': 378,
'nome': 'lucianagenro',
'posicionamento': 'esquerda',
'posts_links': 'Que coisa mais ridícula o ministro da Educação falando em rede nacional que a nova base curricular "está sendo entr… https:///h6l95GhdWT'},
...
{'curtidas': 500,
'nome': 'MBLivre',
'posicionamento': 'direita',
'posts_links': 'URGENTE: Lula pede 1 milhão de reais em indenização moral a Dallagnol e Justiça nega https://d9vVwRH2IS via @'}]]
有没有正确的方法将创建的列表合并为一个?我想在创建数据帧时保留此结构。
导入我们将要使用的所需库:
import pandas as pd
import numpy as np
import tweepy
import json
提供连接Twitter API的密钥:
consumer_key = '....'
consumer_secret = '....'
access_token = '....'
access_secret = '....'
下一步是创建OAuthHandler实例......
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
...然后获得对Twitter API的访问权限。
auth.set_access_token(access_token, access_secret)
最后,我们创建了一个API对象,我们将使用它来获取推文:
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
从FC Barcelona twitter账户中获取最近20条推文:
last_20_tweets_of_FC_Barcelona = api.user_timeline('FCBarcelona'
)
然后在这个代码块中我们隔离了我们下载的每个tweepy状态对象的json部分,并将它们全部添加到列表中....
my_list_of_dicts = []
for each_json_tweet in last_20_tweets_of_FC_Barcelona:
my_list_of_dicts.append(each_json_tweet._json)
...然后我们将此列表写入txt文件:
with open('tweet_json_Barca.txt', 'w') as file:
file.write(json.dumps(my_list_of_dicts, indent=4))
现在我们将从tweet_json.txt文件创建一个DataFrame:
my_demo_list = []
with open('tweet_json_Barca.txt', encoding='utf-8') as json_file:
all_data = json.load(json_file)
for each_dictionary in all_data:
tweet_id = each_dictionary['id']
text = each_dictionary['text']
favorite_count = each_dictionary['favorite_count']
retweet_count = each_dictionary['retweet_count']
created_at = each_dictionary['created_at']
my_demo_list.append({'tweet_id': str(tweet_id),
'text': str(text),
'favorite_count': int(favorite_count),
'retweet_count': int(retweet_count),
'created_at': created_at,
})
#print(my_demo_list)
tweet_json = pd.DataFrame(my_demo_list, columns =
['tweet_id', 'text',
'favorite_count', 'retweet_count',
'created_at'])
以上是关于如何使用Tweepy创建一个pandas数据框?的主要内容,如果未能解决你的问题,请参考以下文章
Pandas - 你如何基于另一个数据框创建一个新的数据框?
如何使用for循环创建一定长度的numpy数组(或pandas数据框)?
如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?