Pandas 不会创建 .csv 文件
Pandas won´t create .csv file
我最近开始研究算法交易并构建一个用于加密交易的机器人。
为此,我创建了一个具有 pandas 到 运行 不同策略和不同参数的回测器。我使用的数据集(csv 文件)相当大(每个大约 40mb)。
这些已处理,但是当我想将处理后的数据保存到 csv 时,没有任何反应。没有任何输出,甚至没有错误消息。我尝试使用完整路径,尝试仅使用文件名保存它,甚至尝试将其保存为 .txt 文件。似乎没有任何效果。我还尝试了在 Whosebug 上找到的解决方案。
我正在使用 Anaconda3,以防这可能是我问题的根源。
在这里你可以找到我的代码部分,它试图将数据框保存到文件中。
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
for i in range(2, len(results_df)):
if results_df.capital.iloc[i] < results_df.capital.iloc[0]:
results_df.drop([i],axis="index")
#results to csv
current_dir = os.getcwd()
results_df.to_csv(os.getcwd()+'\file.csv')
print(results_df)
感谢您的帮助!
您可以大大简化您的代码并将其编写为(也应该 运行 更快):
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
first_row_capital= results_df.capital.iloc[0]
indexer_capital_smaller= results_df.capital < first_row_capital
values_to_delete= indexer_capital_smaller[indexer_capital_smaller].index
results_df.drop(index=values_to_delete, inplace=True)
#results to csv
current_dir = os.getcwd()
results_df.to_csv(os.getcwd()+'\file.csv')
print(results_df)
我认为,您代码中的主要问题可能是,每次在数据框中找到资本满足条件的条目时,您都会编写 csv,并且只有在找到这种情况时才编写它。
如果您只是对 csv 输出进行删除,而不再需要内存中的数据帧,则可以使其更简单:
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
first_row_capital= results_df.capital.iloc[0]
indexer_capital_smaller= results_df.capital < first_row_capital
#results to csv
current_dir = os.getcwd()
results_df[indexer_capital_smaller].to_csv(os.getcwd()+'\file.csv')
print(results_df[indexer_capital_smaller])
第二个变体仅在写入过滤行之前和打印内容之前应用过滤器。
我最近开始研究算法交易并构建一个用于加密交易的机器人。
为此,我创建了一个具有 pandas 到 运行 不同策略和不同参数的回测器。我使用的数据集(csv 文件)相当大(每个大约 40mb)。
这些已处理,但是当我想将处理后的数据保存到 csv 时,没有任何反应。没有任何输出,甚至没有错误消息。我尝试使用完整路径,尝试仅使用文件名保存它,甚至尝试将其保存为 .txt 文件。似乎没有任何效果。我还尝试了在 Whosebug 上找到的解决方案。
我正在使用 Anaconda3,以防这可能是我问题的根源。
在这里你可以找到我的代码部分,它试图将数据框保存到文件中。
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
for i in range(2, len(results_df)):
if results_df.capital.iloc[i] < results_df.capital.iloc[0]:
results_df.drop([i],axis="index")
#results to csv
current_dir = os.getcwd()
results_df.to_csv(os.getcwd()+'\file.csv')
print(results_df)
感谢您的帮助!
您可以大大简化您的代码并将其编写为(也应该 运行 更快):
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
first_row_capital= results_df.capital.iloc[0]
indexer_capital_smaller= results_df.capital < first_row_capital
values_to_delete= indexer_capital_smaller[indexer_capital_smaller].index
results_df.drop(index=values_to_delete, inplace=True)
#results to csv
current_dir = os.getcwd()
results_df.to_csv(os.getcwd()+'\file.csv')
print(results_df)
我认为,您代码中的主要问题可能是,每次在数据框中找到资本满足条件的条目时,您都会编写 csv,并且只有在找到这种情况时才编写它。
如果您只是对 csv 输出进行删除,而不再需要内存中的数据帧,则可以使其更简单:
results_df = pd.DataFrame(results)
results_df.columns = ['strategy', 'number_of_trades', "capital"]
print(results_df)
first_row_capital= results_df.capital.iloc[0]
indexer_capital_smaller= results_df.capital < first_row_capital
#results to csv
current_dir = os.getcwd()
results_df[indexer_capital_smaller].to_csv(os.getcwd()+'\file.csv')
print(results_df[indexer_capital_smaller])
第二个变体仅在写入过滤行之前和打印内容之前应用过滤器。