python - 为什么我不能在 1 个数据帧中获得所有循环数据帧?
问题描述
我在 .csv 文件中有 5 个股票代码的列表。我正在使用下面的循环从每个符号中获取选项数据。理想情况下,所有 5 个符号的输出将保存在 .xlsx 文件中
如果我执行 print(df_puts) 我会看到数据框中的所有符号。但是,输出 .xlsx 文件仅包含 .csv 文件中最后一个符号的数据。基本上它从最后一个循环符号打印数据,而不是从循环内的所有符号打印数据
我一般来说是熊猫和python的新手。我想了解为什么未来的项目会发生这种情况
stocklist = pd.read_excel(filePath)
for i in stocklist.index:
stock=str(stocklist["Symbols"][i])
#df = pdr.get_data_yahoo(stock, start, now, threads=False)
option_dict = options.get_options_chain(stock)
#print(option_dict)
df_puts = pd.DataFrame.from_dict(option_dict.get("puts"))
df_calls = pd.DataFrame.from_dict(option_dict.get("calls"))
newFile = os.path.dirname(filePath1) + "/OptionsOutput.xlsx"
writer = ExcelWriter(newFile)
df_puts.to_excel(writer, "puts", float_format="%.3f")
df_calls.to_excel(writer, "calls", float_format="%.3f")
writer.save()
解决方案
您需要将所有数据帧保存在一个数组中,然后将它们连接到最终数据帧中。之后,您可以将它们保存在 Excel 文件中。
stocklist = pd.read_excel(filePath)
call_df_arr = [] # Created new lists to save dataframe for each stock
put_df_arr = []
for i in stocklist.index:
stock=str(stocklist["Symbols"][i])
#df = pdr.get_data_yahoo(stock, start, now, threads=False)
option_dict = options.get_options_chain(stock)
df_puts = pd.DataFrame.from_dict(option_dict.get("puts"))
df_calls = pd.DataFrame.from_dict(option_dict.get("calls"))
call_df_arr.append(df_calls) # Append DFs
put_df_arr.append(df_puts)
final_call_df = pd.concat(call_df_arr) # Concat DFs
final_put_df = pd.concat(put_df_arr)
newFile = os.path.dirname(filePath1) + "/OptionsOutput.xlsx"
writer = ExcelWriter(newFile)
final_put_df.to_excel(writer, "puts", float_format="%.3f") # Changed name of df to final_put_df
final_call_df.to_excel(writer, "calls", float_format="%.3f")
writer.save()
编辑 - 为已完成的代码更改添加了注释。
推荐阅读
- c# - 用于简单登录的 C# 中的参数化查询
- javascript - Angular:Http vs fetch api
- .net-core - EntityFramework Core database first, Scaffold-DbContext A positional parameter cannot be found that accept argument '--use-database-names' 错误
- excel - FileSystemObject - 无法打开保存在文件夹中的文件
- swift - 错误类型“MyClass”在“onTimer”上没有成员
- android - PayPal Android SDK 不适用于印度货币 INR
- bash - Bash:回显和复制结果
- vb.net - 需要用计时器错开蛇的身体部位
- koa - 如何在 KOA 中解析二进制数据(“multipart/form-data”)?
- python - 通过 tor 发出请求,requests.exceptions.ConnectionError Errno 61: Connection Refused