Экспорт определенных данных в файл csv

#python #pandas #export-to-csv

Вопрос:

Начинающий питон. Не торопись со мной, пожалуйста 🙂

У меня есть сценарий консолидации, который заканчивается «печатью» списка файлов, независимо от того, являются ли они кандидатами на консолидацию или на прорыв. Пока он хорошо печатается, я хочу сделать эти отпечатки и создать 2 отдельных csv-файла.

Что делает скрипт, так это считывает сотни CSV-файлов в папке dataset/daily и создает фрейм данных, чтобы затем выяснить, какие запасы являются консолидаторами или кандидатами на прорыв.

То, что я пытаюсь сделать, — это заставить скрипт ЭКСПОРТИРОВАТЬ два отдельных списка, один из которых содержит консолидаторы, а другой-биржевые символы прорыва, из данных, но у меня масса проблем с этим. Вы можете видеть эти строки внизу.

Любая помощь была бы очень признательна.

 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))
 

Комментарии:

1. В чем проблема с тем, что вы написали?

2. Вам следует создать два новых кадра данных, содержащих отфильтрованные данные из исходного df. Затем запишите каждый из них в соответствующий CSV-файл.

Ответ №1:

Режим записи панд.По умолчанию используется функция 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')
 

Если существует много видов фреймов данных. Вы можете использовать двумерный список, чтобы уменьшить избыточность оператора.