数据框未显示来自 Android 的 twitter 源

我正在尝试对 Twitter 帐户进行一些分析,但在尝试显示来自 Android 的资源时遇到了麻烦。我所做的是合并了两个 json 文件,我认为我正确地合并了它,但是如果我弄错了,这里是我使用的代码。


old_tweets = load_tweets("real_tweets/real_old_tweets.json")

print(len(old_tweets))  

for aLis1 in old_tweets:

    if aLis1 not in tweets:

        tweets.append(aLis1)

load_tweets 是一个自定义函数,它简单地打开并加载给定特定路径的 json 文件


with open(path, "rb") as f:

    import json

    return json.load(f)

合并推文的两个 json 文件后,我调用这个函数来创建数据框并清理它以只显示我想要的信息。


df_tweets1 = pd.DataFrame(tweets)

df_tweets2 = df_tweets1[['id','created_at','source','full_text','retweet_count']]

df_tweets = df_tweets2.drop_duplicates('id', keep=False

df_tweets.set_index('id', inplace=True)

df_tweets = df_tweets.rename(columns={"created_at": "time", "full_text": "text"})

df_tweets["time"] = pd.to_datetime(df_tweets["time"])

问题是,当我调用df_tweets["source"].unique() 时,我没有看到任何来自 android 的推文


array(['<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',

   '<a href="http://twitter.com/#!/download/ipad" rel="nofollow">Twitter for iPad</a>',

   '<a href="https://studio.twitter.com" rel="nofollow">Twitter Media Studio</a>',

   '<a href="https://studio.twitter.com" rel="nofollow">Media Studio</a>',

   '<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>'],

  dtype=object)

合并两组 Twitter 数据时我做错了什么吗?或者我在尝试创建数据框时做错了什么?


编辑**这里是 real_old_tweets.json 的示例输出,以了解格式。我只会发布一条,因为一条推文中包含了很多信息。


守着一只汪
浏览 184回答 1
1回答

沧海一幻觉

我假设您拥有“android”来源,但我不清楚您的数据是什么样子以及“id”和来源之间的关系是什么。话虽如此,但在准备数据时存在一个错误。您正在删除所有重复项。例如:>>> import pandas as pd>>> df = pd.DataFrame(data={'col1':[1,2,2],'col2':[3,4,3],'col3':[1,4,1]})>>> df&nbsp; &nbsp;col1&nbsp; col2&nbsp; col30&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp; &nbsp;11&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; &nbsp;4&nbsp; &nbsp; &nbsp;42&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp; &nbsp;1>>> df.drop_duplicates('col1',keep=False)&nbsp; &nbsp;col1&nbsp; col2&nbsp; col30&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp; &nbsp;1在上面的代码中,如果您使用“keep=False”,您可以看到它正在删除所有重复的行。>>> df.drop_duplicates('col1',keep='first')&nbsp; &nbsp;col1&nbsp; col2&nbsp; col30&nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; &nbsp;3&nbsp; &nbsp; &nbsp;11&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; &nbsp;4&nbsp; &nbsp; &nbsp;4相反,使用keep='first'或keep='last'并查看是否有任何改进。此外,如果我能对数据有更多的了解,找出哪里出错了,那就太好了。编辑一段时间后,我将您的 JSON 对象保存到“me.json”文件中,格式如下:[{},{}]其中第一个对象的来源是 iPhone,第二个对象的来源是 android。我使用您的代码加载数据:Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)&nbsp;[GCC 7.3.0] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import pandas as pd>>> import json>>> with open('me.json','rb') as file:...&nbsp; &nbsp; &nbsp;json_list = json.load(file)...&nbsp;>>> len(json_list)2>>> df = pd.DataFrame(json_list)>>> df1 = df[['id','source']]>>> df1['source'].value_counts()<a href="linktwitter.com/download/Android" rel="nofollow">Twitter for Android</a>&nbsp; &nbsp; 1<a href="linktwitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>&nbsp; &nbsp; &nbsp; 1Name: source, dtype: int64在上面的输出中,您可以看到我能够看到“Android”。我的结论是,在您的数据中,df['source'] 列中可能根本没有“Android”。请仔细查看,因为每个 JSON 对象中有两个“源”键,一个键在“quoted_status”内。您可能已经在此密钥中看到了“Android”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python