使用zip结合日期列表与DataFrame报'str无loc属性'错误如何解决?
问题原因
你对单个DataFrame直接做迭代操作时,pandas默认返回的是各列的列名字符串,而非你预期的子DataFrame/行数据,所以循环中拿到的df实际是time、value这类列名字符串,自然不存在loc属性触发报错。
你的代码逻辑是建立在df_dataset是「多个子DataFrame组成的列表」的假设上,但你已经确认它是单个DataFrame,所以迭代逻辑完全不符合预期。
修复方案
最优方案:直接批量赋值(无需循环)
你要实现的「给每行匹配对应日期」的需求,直接一行代码就能完成,性能远高于循环写法:
df_dataset['date'] = pd.to_datetime(date_list)
该方法基于pandas的向量化操作特性,会自动按行顺序匹配date_list中的日期,只要你确认二者长度完全一致就可以直接使用。
可选方案:逐行处理写法(仅当你有额外逐行操作需求时使用)
如果你的实际场景确实需要逐行处理数据,可以用iterrows()遍历行,同时按索引取对应日期:
final_dataset_list = [] for idx, (_, row) in enumerate(df_dataset.iterrows()): # 把单行Series转为单行DataFrame current_df = row.to_frame().T current_df['date'] = pd.to_datetime(date_list[idx]) final_dataset_list.append(current_df) # 合并所有行得到最终数据集 final_dataset = pd.concat(final_dataset_list, ignore_index=True)
内容的提问来源于stack exchange,提问作者curtisp
相关产品推荐
相关产品推荐

