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

过滤Twitter推文后name列变为整数的问题解决求助

问题原因

你遇到的问题核心是:在iterrows()返回的Series对象中,row.name是Series的内置属性,对应原DataFrame的索引值,而不是你要提取的name列的值。其他列(如content、language)因为没有和Series的内置属性重名,所以能正确获取列数据,只有name列被错误替换成了原索引的整数。

解决方案

方案1:修改原代码的取值方式

把row.name改成row['name'],通过索引访问列值,避免触发Series的内置属性:

def twitter_filter(df, search):
  date_ls = []
  id_ls = []
  content_ls = []
  lan_ls = []
  name_ls = []
  retweet_ls = []
  cleaned_tweet_ls = []

  for i, row in df.iterrows():
    if search in row.cleaned_tweet:
      date_ls.append(row.date)
      id_ls.append(row.id)
      content_ls.append(row.content)
      lan_ls.append(row.language)
      name_ls.append(row['name'])  # 改为索引访问列值
      retweet_ls.append(row.retweet)
      cleaned_tweet_ls.append(row.cleaned_tweet)
      
  new_dict = {
      "date": date_ls,
      "id": id_ls,
      "content": content_ls,
      "lan" : lan_ls,
      "name" : name_ls,
      "retweet" : retweet_ls,
      "cleaned_tweet": cleaned_tweet_ls,  # 修正拼写错误:cleaned_tweeet → cleaned_tweet
  }
  new_df = pd.DataFrame(new_dict)
  return new_df

方案2:使用Pandas布尔索引(更高效)

iterrows()处理大数据时效率较低,推荐直接用Pandas布尔索引完成过滤,代码更简洁且性能更好:

def twitter_filter(df, search):
    # 生成布尔掩码:筛选cleaned_tweet包含search的行
    mask = df['cleaned_tweet'].str.contains(search)
    # 直接筛选所需列
    new_df = df.loc[mask, ['date', 'id', 'content', 'language', 'name', 'retweet', 'cleaned_tweet']]
    # 重命名language列为lan(和原输出格式保持一致)
    new_df = new_df.rename(columns={'language': 'lan'})
    return new_df.reset_index(drop=True)  # 可选:重置索引,移除原索引残留

内容的提问来源于stack exchange,提问作者Henry JH Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:50:24