【问题标题】:Export specific data to csv file将特定数据导出到 csv 文件
【发布时间】:2021-03-19 22:17:13
【问题描述】:

初学者python。请跟我慢慢来:)

我有一个以“打印”文件列表结尾的合并脚本,无论它们是合并候选文件还是拆分候选文件。虽然它打印得很好,但我想把这些打印出来并创建 2 个单独的 csv 文件。

脚本的作用是读取数据集/每日文件夹中的数百个 CSV 文件并创建数据框,然后确定哪些股票是整合者或突破候选者。

我想做的是让脚本导出两个单独的列表,一个列出合并者,另一个列出数据中的突破股票代码,但这样做有很多麻烦。您可以在底部看到这些行。

任何帮助将不胜感激。

import os, pandas

def is_consolidating(df, percentage=2.5):
    recent_candlesticks = df[-15:]
    
    max_close = recent_candlesticks['Close'].max()
    min_close = recent_candlesticks['Close'].min()

    threshold = 1 - (percentage / 100)
    if min_close > (max_close * threshold):
        return True        

    return False

def is_breaking_out(df, percentage=4.0):
    if df.empty:
        pass
    else:
        last_close = df[-1:]['Close'].values[0]
        #print (last_close)

    if is_consolidating(df[:-1], percentage=percentage):
        recent_closes = df[-16:-1]

        if last_close > recent_closes['Close'].max():
            return True

    return False

for filename in os.listdir('datasets/daily'):
    df = pandas.read_csv('datasets/daily/{}'.format(filename))

    if is_consolidating(df):
        df.to_csv('export_consolidators.csv')
        print("{} is consolidating".format(filename))
        
    if is_breaking_out(df):
        df.to_csv('export_breakouts.csv')
        print("{} is breaking out".format(filename))

【问题讨论】:

  • 你写的有什么问题?
  • 您应该创建两个新数据框,其中包含来自原始 df 的过滤数据。然后将它们中的每一个写入相应的 CSV 文件。

标签: python pandas export-to-csv


【解决方案1】:

pandas.DataFrame.to_csv()的写入模式默认为w。可能的值可以参考open()

我认为您想通过附加将每种数据框存储到单独的文件中。你可以这样做

for filename in os.listdir('datasets/daily'):
    df = pandas.read_csv('datasets/daily/{}'.format(filename))

    if is_consolidating(df):
        df.to_csv('export_consolidators.csv', mode='a', header=False)
        print("{} is consolidating".format(filename))
        
    if is_breaking_out(df):
        df.to_csv('export_breakouts.csv', mode='a', header=False)
        print("{} is breaking out".format(filename))

a这里表示追加模式。

您也可以先将它们存储在一个列表中,然后将pandas.concat() 每个列表存储到一个数据帧中。

consolidating_list = []
breaking_out_list = []

for filename in os.listdir('datasets/daily'):
    df = pandas.read_csv('datasets/daily/{}'.format(filename))

    if is_consolidating(df):
        consolidating_list.append(df)
        print("{} is consolidating".format(filename))
        
    if is_breaking_out(df):
        breaking_out_list.append(df)
        print("{} is breaking out".format(filename))

combined_consolidating = pd.concat(consolidating_list).reset_index()
combined_breaking_out = pd.concat(breaking_out_list).reset_index()

combined_consolidating.to_csv('export_consolidators.csv')
combined_breaking_out.to_csv('export_breakouts.csv')

如果有多种数据框。您可以使用二维列表来减少冗余语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2014-08-07
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多