为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2021-11-30 18:36:51
我正在尝试对 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=Falsedf_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 的示例输出,以了解格式。我只会发布一条,因为一条推文中包含了很多信息。
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我假设您拥有“android”来源,但我不清楚您的数据是什么样子以及“id”和来源之间的关系是什么。话虽如此,但在准备数据时存在一个错误。您正在删除所有重复项。


例如:


>>> import pandas as pd

>>> df = pd.DataFrame(data={'col1':[1,2,2],'col2':[3,4,3],'col3':[1,4,1]})

>>> df

   col1  col2  col3

0     1     3     1

1     2     4     4

2     2     3     1

>>> df.drop_duplicates('col1',keep=False)

   col1  col2  col3

0     1     3     1

在上面的代码中,如果您使用“keep=False”,您可以看到它正在删除所有重复的行。


>>> df.drop_duplicates('col1',keep='first')

   col1  col2  col3

0     1     3     1

1     2     4     4


相反,使用keep='first'或keep='last'并查看是否有任何改进。此外,如果我能对数据有更多的了解,找出哪里出错了,那就太好了。


编辑


一段时间后,我将您的 JSON 对象保存到“me.json”文件中,格式如下:


[{},{}]

其中第一个对象的来源是 iPhone,第二个对象的来源是 android。我使用您的代码加载数据:


Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 

[GCC 7.3.0] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import pandas as pd

>>> import json

>>> with open('me.json','rb') as file:

...     json_list = json.load(file)

... 

>>> 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>    1

<a href="linktwitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>      1

Name: source, dtype: int64


在上面的输出中,您可以看到我能够看到“Android”。我的结论是,在您的数据中,df['source'] 列中可能根本没有“Android”。


请仔细查看,因为每个 JSON 对象中有两个“源”键,一个键在“quoted_status”内。您可能已经在此密钥中看到了“Android”。


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信