写入 GroupedBy 动态 .csv 文件时出现 KeyError

问题描述

我有一组 100 个 Twitter 帐户,我一直在通过 snscrape 从中抓取推文。由于 twitter 句柄的数量庞大,我一直在寻找以编程方式完成每一步的方法。到目前为止,我已经能够使用 for 循环和 var() 函数以编程方式从每个 twitter 帐户中抓取每条推文,但是现在我正在尝试保存我遇到了一个关键错误

到目前为止,我的方法如下:

  1. 创建 Twitter 句柄列表。
handles=['handle1','handle2','handle3']
  1. 为要保存到的每条推文中的数据创建空列表。
    for handle in sanitized_twitter_handles:
        Dynamic_Variable_Name = "tweets_list"+handle
        vars()[Dynamic_Variable_Name] = []
  1. 从 snscrape 运行一些函数来抓取 Twitter 数据并以编程方式将其加载到每个创建的列表中。在应用一些日期提取函数后,对于每个创建的数据帧,这导致的数据帧结构类似于:
                                                         tweets_listhandle1
                   Datetime              Tweet Id                    Text               Username    year    month
    0   2021-03-17 20:21:21+00:00   1097298925851811841     text 1 text 1 text 1 ...    handle1     2021    3
    1   2021-03-17 19:32:19+00:00   1902269509419232769     text 2 text 2 text 2 ...    handle1     2021    3
    2   2021-03-17 15:49:01+00:00   1092093391025184775     text 3 text 3 text 3 ...    handle1     2021    3
    3   2021-03-17 14:04:54+00:00   0072187198827753218     text 4 text 4 text 4 ...    handle1     2021    3
    4   2021-03-16 22:16:50+00:00   0071948009458852868     text 5 text 5 text 5 ...    handle1     2021    3

  1. 结合使用 groupby 函数和 vars() 为每个句柄创建一个单独的系列对象,按年份分组。
for handle in sanitized_twitter_handles:
    Dynamic_Variable_Name3 = "tweets_df_"+handle
    Dynamic_Variable_Name4 = "grouped_series_"+handle
    vars()[Dynamic_Variable_Name4]=vars()[Dynamic_Variable_Name3].groupby('year')['Text'].agg('/'.join)

5.将这些对象中的每一个再次转换为数据帧。

for handle in sanitized_twitter_handles:
    Dynamic_Variable_Name4 = "grouped_series_"+handle
    Dynamic_Variable_Name5 = "grouped_df_"+handle
    vars()[Dynamic_Variable_Name5]=vars()[Dynamic_Variable_Name4].to_frame()

生成的数据框如下所示:

                                             Text
year                                                   
2011  text 1 text 1 text 1 text 2 text 2 text 2...
2012  text 3 text 3 text 3 text 4 text 4 text 4...
2013  text 5 text 5 text 5 text 6 text 6 text 6...

  1. 到目前为止一切都进行得很顺利,但是当我将这批数据帧写入 csvs 时,触发了一个错误
for handle in sanitized_twitter_handles:
    Dynamic_Variable_Name5 = "grouped_df_"+handle
    Dynamic_File_Name='grouped_by_year_df_'+handle+'.csv'
    vars()[Dynamic_Variable_Name5].to_csv(vars()[Dynamic_File_Name],sep=',',fieldnames=['Year','Text'],index=True,encoding='utf-8')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-84-431028213c91> in <module>
      2     Dynamic_Variable_Name5 = "grouped_df_"+handle
      3     Dynamic_File_Name='grouped_by_year_df_'+handle+'.csv'
----> 4     vars()[Dynamic_Variable_Name5].to_csv(vars()[Dynamic_File_Name],index=True)

KeyError: 'grouped_by_year_df_handle1.csv'

我认为标题可能已损坏,并尝试将 fieldnames (fieldnames=['Year','Text']) 函数添加到 .to_csv 命令。我还认为推文中的字符可能不适合 .csv 文件格式,并更改了编码方法 (encoding='utf-8')。无论如何,我仍然遇到 KeyErrors。

关于如何将这 100 个变量写入单个 csv 文件的任何建议将不胜感激。我宁愿不手动将每个文件写入 .csv。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)