为何Pandas在for循环中会将DataFrame转为DataFrame与Series?
问题排查:DataFrame迭代时类型变为Series导致报错
代码片段
import pandas import numpy arms_bayes_list = pandas.DataFrame( {'arms': pandas.Series(arms_bayes), 'priori_mean': pandas.Series(arm_priori_mean_vectorized(arms_bayes)), 'variance_square': pandas.Series(arm_variance_square_vectorized(arms_bayes)), 'posterior_mean': pandas.Series(arm_posterior_mean_vectorized(arms_bayes)), 'posterior_variance_square': pandas.Series(arm_posterior_variance_square_vectorized(arms_bayes)), 'empirical_mean': pandas.Series(arm_empirical_mean_vectorized(arms_bayes)), 'mean': pandas.Series(arm_mean_vectorized(arms_bayes)), 'priori_variance_square': pandas.Series(arm_variance_square_vectorized(arms_bayes))}) optimal_mean_bayes = numpy.amax(arms_bayes_list[["mean"]]) print(type(arms_bayes_list)) # 输出类型为<class'pandas.core.frame.DataFrame'> for round_no in range(int(no_of_rounds)): print(type(arms_bayes_list)) # 输出类型为<class'pandas.core.frame.DataFrame'><class 'pandas.core.series.Series'> # 此处应有迭代DataFrame的代码(如itertuples/iterrows),但未展示
问题描述
迭代上述DataFrame时触发错误,提示Series没有itertuples/iterrows属性;循环外打印arms_bayes_list类型为DataFrame,但循环内打印显示该变量时而为DataFrame、时而为Series,无法理解变量类型为何发生变化。
排查与解决
核心原因:你在循环内部未展示的代码中,对
arms_bayes_list进行了重新赋值,将其从DataFrame覆盖为Series。
比如常见错误操作:- 直接执行
arms_bayes_list = arms_bayes_list['mean'](取单列会返回Series) - 调用某个返回Series的函数并将结果赋值给
arms_bayes_list
- 直接执行
修复步骤:
- 检查循环内所有涉及
arms_bayes_list的赋值语句,禁止用Series覆盖原DataFrame变量 - 若需要操作DataFrame的子集,使用新变量名存储,例如:
# 错误写法(覆盖原变量) # arms_bayes_list = arms_bayes_list['mean'] # 正确写法(保留原DataFrame) mean_series = arms_bayes_list['mean'] - 确认迭代代码仅作用于未被修改的
arms_bayes_list(DataFrame类型)
- 检查循环内所有涉及
额外验证:循环外的
numpy.amax(arms_bayes_list[["mean"]])不会改变arms_bayes_list的类型,此操作无问题。
内容的提问来源于stack exchange,提问作者Samyak Jha
相关产品推荐
相关产品推荐

