You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python推文元数据提取脚本替换for循环为列表推导式后触发AttributeError的问题排查求助

解决列表推导式中Pandas Series无split方法的错误

嘿,我来帮你搞定这个问题!你遇到的AttributeError: 'Series' object has no attribute 'split'其实是个常见的Pandas小坑,咱们一步步拆解原因并修复。

错误根源

你的text_df是只有一列的DataFrame,当你用tweet.loc[j]时,你获取的是DataFrame的一整行——这是一个Pandas Series对象,而不是你要处理的单个字符串推文。Series本身没有split()方法,自然就会触发错误。之前用for循环时可能你是直接取了列的元素,但改成列表推导式后误取了整行,才导致问题。

修复方案1:修正列表推导式的迭代对象

直接获取存储推文的列(这里列名是0),迭代这个列的每个字符串元素,就能正常调用字符串方法了:

import re
import pandas as pd

def tweetFeatures(tweet): 
    # 先拿到存储推文的列,得到一个字符串元素组成的Series
    tweet_text = tweet[0]
    
    # 统计每个推文的单词数
    wordcount = [len(text.split()) for text in tweet_text] 
    # 统计每个推文的字符数
    chars = [len(text) for text in tweet_text] 
    # 提取每个推文的提及用户
    mentions = [list(re.findall("@([a-zA-Z0-9_]{1,50})", text)) for text in tweet_text] 
    # 统计每个推文的提及数量
    mention_count = [len(m) for m in mentions] 
    # 提取每个推文的话题标签
    hashtags = [list(re.findall("#([a-zA-Z0-9_]{1,50})", text)) for text in tweet_text] 
    # 统计每个推文的话题标签数量
    hashtag_count = [len(h) for h in hashtags] 
    # 提取每个推文的URL
    url = [list(re.findall("(?P<url>https?://[^\s]+)", text)) for text in tweet_text] 
    # 统计每个推文的URL数量
    url_count = [len(u) for u in url] 
    
    # 将所有特征整合为DataFrame
    feats = {"n_words":wordcount,"n_chars":chars,"n_mentions":mention_count,"n_hashtag":hashtag_count,"n_url":url_count} 
    feats_df = pd.DataFrame(feats) 
    return feats_df

修复方案2:更Pandas化的实现(推荐)

用Pandas的apply方法直接对列操作,代码更简洁,也符合Pandas的使用习惯:

import re
import pandas as pd

def tweetFeatures(tweet): 
    tweet_text = tweet[0]
    feats_df = pd.DataFrame()
    
    # 统计单词数
    feats_df["n_words"] = tweet_text.apply(lambda x: len(x.split()))
    # 统计字符数
    feats_df["n_chars"] = tweet_text.apply(len)
    
    # 封装提取函数,复用逻辑
    def count_pattern(pattern, text):
        return len(re.findall(pattern, text))
    
    # 统计提及数量
    feats_df["n_mentions"] = tweet_text.apply(lambda x: count_pattern("@([a-zA-Z0-9_]{1,50})", x))
    # 统计话题标签数量
    feats_df["n_hashtag"] = tweet_text.apply(lambda x: count_pattern("#([a-zA-Z0-9_]{1,50})", x))
    # 统计URL数量
    feats_df["n_url"] = tweet_text.apply(lambda x: count_pattern("(?P<url>https?://[^\s]+)", x))
    
    return feats_df

测试验证

用你的测试数据跑一下:

text = ["@Harrison2Jennifer Tokyo 2020 is so much fun. Loving every bit of it just as @MeggyJane & @Tommy620 say #Tokyo2020 https://www.corp.com", "Gabrielle Thomas is my favourite sprinter @TooSports https://www.flick.org https://www.bugger.com", "@Sports_head I wish the #Tokyo2020 @Olympics will never end #Athletics #Sprints", "I hate the attitude of officials at this olympics @Kieran https://www.launch.com", "Why can't the #Athletics be more exciting? #Tokyo2020", "It is so much fun to see beautful colors at the #Olympics"]
text_df = pd.DataFrame(text)
print(tweetFeatures(text_df))

运行后就能得到正确的特征DataFrame,不会再触发错误啦。

内容的提问来源于stack exchange,提问作者Ifeanyi Idiaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:27:31