【问题标题】:Tweepy - Error 144 when populating a pandas dataframe column with tweet stringsTweepy - 使用推文字符串填充 pandas 数据框列时出现错误 144
【发布时间】:2018-03-15 06:15:00
【问题描述】:

我正在使用 twitter ID 在数据框中填充一些行。我第一次在没有 except 的情况下运行了脚本,但出现了错误: [{'code': 144, 'message': 'No status found with that ID.'}] 我知道这可能是因为有人删除了推文或其他原因。但是,我需要继续前进!

所以我使用了except: pass,但它实际上并没有返回任何东西。所有行都是空的。我一直在努力解决这个问题,但我不知道如何解决它。

我的数据框:

          TweetID                text               pageType
index   
id1                     My code is not working      http://blablabla.com
id2     451864165416    Nan                         twitter
id3     849849849844    Nan                         twitter

这是不返回任何内容的代码:

try:
    if (df['pageType'] == 'twitter').any:
        df['text'] = df.tweetID.apply(lambda x: api.get_status(x).text)
except:
    pass

就是这样! 非常感谢!

【问题讨论】:

    标签: python pandas dataframe tweepy


    【解决方案1】:

    我推荐一个布尔索引 + loc + apply

    mask = df['pageType'] == 'twitter'
    df.loc[mask, 'text'] = df.loc[mask, 'twitterID']\
                               .apply(lambda x: api.get_status(x).text)
    

    【讨论】:

    • 谢谢,@coldspeed。那肯定看起来更好,但不幸的是,我遇到了同样的错误:/干杯!
    • @MoniqueMarins 不用担心。我看到一个 try-except 是无法避免的。我稍后会提供修复,所以请稍等。
    【解决方案2】:

    问题是,您的tryexcept 设置在apply 可以完成之前停止执行,这反过来又不会创建新列。通常,您会将此子句放在for-loop 中,就像您使用它的方式一样。相反,您可以创建一个自定义函数,以便它捕获 tweetID 无效值的错误。

    def GetStuff(value):
        try:
            return api.get_status(value).text
        except:
            return "ERROR"
    
    df['text'] = df.tweetID.apply(lambda x: GetStuff(x))
    

    满足cmets中的条件:

    选项 1

    def GetStuff(value):
        try:
            return api.get_status(value).text
        except:
            return "ERROR"
    
    df['text'] = df.where(df.tweetID == 'twitter').tweetID.apply(lambda x: GetStuff(x))
    

    这适用于tweetID == twitter的函数,其他值为NaN,您可以使用fillna()替换为其他文本

    选项 2

    GetStuff() 函数中构建条件。

    def GetStuff(value):
        if value == 'twitter':
            try:
                return api.get_status(value).text
            except:
                return "ERROR"
         else:
             return 'NotTwitter'
    
    df['text'] = df.tweetID.apply(lambda x: GetStuff(x))
    

    【讨论】:

    • 谢谢。这很好用。但是,我正在填写“文本”列,如果“页面类型”不是“推特”,我不想返回“错误”。例如,我想返回第 1 行中的字符串,并使用 GetStuff 函数查找并填写第 2 行和第 3 行。最后,如果它不起作用,那么我返回“ERROR”。有可能还是我需要分解成更小的步骤?
    猜你喜欢
    • 2017-04-11
    • 2013-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2018-06-12
    • 2020-01-06
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多