首页 > 解决方案 > 为什么我不能在 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()

标签: pythonpandasdataframe

解决方案


您需要将所有数据帧保存在一个数组中,然后将它们连接到最终数据帧中。之后,您可以将它们保存在 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()

编辑 - 为已完成的代码更改添加了注释。


推荐阅读