Pandas使用for循环生成DataFrame仅输出最后一行如何解决
问题原因
- 变量名笔误:循环内定义的增长率变量为
Growth,但构造字典时使用了不存在的变量EPSGrowth,直接运行会抛出变量未定义的错误 - DataFrame创建位置错误:
df = pd.DataFrame(data)代码在for循环外部执行,只会读取循环最后一次迭代生成的data数据(对应股票SQ),最终仅生成单行数据 - 定义的
stocksfinal列表未参与DataFrame构造逻辑,向其中追加的数据没有任何作用
修复代码(易理解版本)
import pandas as pd stocks = ['AMZN', 'ZM', 'SQ'] # 存储每次循环生成的单行DataFrame df_list = [] for stock in stocks: Growth = 10 Value = 8 Discount = 2 data = { 'Stock': [stock], 'Growth': [Growth], 'Value': [Value], 'Discount': [Discount] } df_list.append(pd.DataFrame(data)) # 循环结束后合并所有行生成完整DataFrame df = pd.concat(df_list, ignore_index=True) print(df)
运行输出
Stock Growth Value Discount 0 AMZN 10 8 2 1 ZM 10 8 2 2 SQ 10 8 2
更高效的写法(无需循环创建临时DataFrame)
import pandas as pd stocks = ['AMZN', 'ZM', 'SQ'] # 提前构造对应每列的空列表 data = { 'Stock': [], 'Growth': [], 'Value': [], 'Discount': [] } for stock in stocks: data['Stock'].append(stock) data['Growth'].append(10) data['Value'].append(8) data['Discount'].append(2) df = pd.DataFrame(data) print(df)
内容的提问来源于stack exchange,提问作者Evan Wright
相关产品推荐
相关产品推荐

