在Pandas中用For Loop批量创建DataFrame遇报错求助
解决按日期循环拆分DataFrame的报错问题
我懂你想把重复的手动拆分操作改成循环来简化代码的需求,先看你原来的手动实现是完全没问题的:
tweet24042018 = tweets.loc[tweets['date2'] == '24042018'].copy() tweet23042018 = tweets.loc[tweets['date2'] == '23042018'].copy() tweet22042018 = tweets.loc[tweets['date2'] == '22042018'].copy()
但你尝试的循环代码之所以报错,核心问题是Python不允许用['tweet'+f'{key}'] = ...这种列表形式的语法来动态创建变量——这本身就是不符合Python语法规则的写法。
推荐方案:用字典存储拆分后的DataFrame
动态生成独立变量其实不是最佳实践(容易污染命名空间,后期维护起来很麻烦),更规范的做法是用字典来统一管理所有拆分后的子DataFrame:
# 先获取所有唯一的日期值(如果collect已经定义好可以直接用,否则从DataFrame提取) collect = tweets['date2'].unique() # 创建空字典存放结果 tweet_dict = {} # 循环完成拆分 for key in collect: tweet_dict[f'tweet{key}'] = tweets.loc[tweets['date2'] == key].copy()
之后要访问某一天的数据,直接通过字典的键调用即可:
# 示例:获取24042018对应的推文数据 tweet_dict['tweet24042018']
如果一定要生成独立变量(不推荐)
如果你确实需要单独的变量名,可以借助globals()函数操作全局命名空间来实现,但请谨慎使用(可能会和现有变量重名):
collect = tweets['date2'].unique() for key in collect: globals()[f'tweet{key}'] = tweets.loc[tweets['date2'] == key].copy()
循环结束后,你就能像手动创建的那样直接使用tweet24042018、tweet23042018这类变量了。
内容的提问来源于stack exchange,提问作者ambrish dhaka
相关产品推荐
相关产品推荐

