#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')
Если существует много видов фреймов данных. Вы можете использовать двумерный список, чтобы уменьшить избыточность оператора.