обновленный вопрос
с помощью приведенного ниже кода я могу получить доступ к кадру данных только после завершения цикла for, но я хочу использовать последний созданный столбец кадра данных в промежуточное время. то есть через каждые 5 минут, в зависимости от того, что является последним столбцом фрейма данных, как этого добиться?
@app.route("/sortbymax")
def sortbymax():
df = updated_data()
#### here i want to use most recently created column
df = create_links(df)
df = df.sort_values(by=['perc_change'], ascending=False)
return render_template('sortbymax.html',tables=[df.to_html(escape = False)], titles=df.columns.values)
def read_data():
filename = r'c:\Users\91956\Desktop\bk.xlsm'
df = pd.read_excel(filename)
return df
def updated_data():
df = read_data()
for i in range(288):
temp = read_data()
x=datetime.datetime.now().strftime("%H:%M:%S")
df['perc_change_'+x] = temp['perc_change']
time.sleep(300)
return df
я имею в виду значения в столбце за последние 5 минут
мой вопрос: если у меня есть один столбец в фрейме данных, в котором значения продолжают меняться, я хочу сохранять их через каждые 5 минут. в новых столбцах
Можете ли вы описать свои данные подробнее? У вас есть исходный столбец и множество других столбцов, представляющих perc_change, которые происходят каждые 5 минут. Это правильно? Мой вопрос: откуда вы берете эти значения? Это API или что-то в этом роде? Как узнать новые значения? И, наконец, относительно вашего вопроса: вы хотите, чтобы новые столбцы включали только значения, которые изменились, а те, которые не изменились, были пустыми?
Итак, столбец per_change постоянно обновляется по какому-то алгоритму, и вы хотите сохранять «изображения» этого столбца каждые 5 минут?
Нет. Когда я читаю лист Excel, у него есть только один столбец perc_change. я хочу создавать новые столбцы каждые 5 минут. предположим, я начинаю читать данные в 10:00. в 10:05 должен быть добавлен новый столбец в фрейме данных, который будет содержать значения perc_change в 10:05. снова в 10:10 должны быть сгенерированы новые столбцы, которые будут содержать значения perc_change в 10:10 и так далее.
я импортирую данные в режиме реального времени в excel и сохраняю этот лист excel каждые 1 секунду, используя макрос. вот как значения продолжают меняться в столбце perc_change
мне не нужны картинки, они показаны только для того, чтобы объяснить вопрос, я хочу, чтобы столбцы генерировались в фрейме данных
Под «изображениями» я подразумеваю копию столбца. Не беспокойтесь, я понял проблему, взгляните на мое предложение и дайте мне знать, если оно сработает.
Я вижу, у вас есть файл .xlsm, что означает, что в Excel включен макрос. Я думаю, вы можете его прочитать, но если вы хотите изменить его с помощью Python, вы, скорее всего, потеряете часть макроса в своем Excel.
Для части питона: это будет копировать столбец perc_change каждые 5 минут с соответствующим именем. Однако имейте в виду, что это будет работать только в течение одного дня (после этого он заменит существующие столбцы). Если вы хотите работать дольше, дайте мне знать, чтобы я добавил день-месяц-год (все, что вы хотите) в имена столбцов.
import datetime
import time
def read_data():
filename = r'c:\Users\91956\Desktop\bk.xlsm'
df = pd.read_excel(filename)
return df
def write_data(df):
filename = r'c:\Users\91956\Desktop\bk.xlsm'
df.to_excel(filename)
df = read_data() #read excel for first time
for i in range(288): #this will run for one day exactly
temp = read_data()
x=datetime.datetime.now().strftime("%H:%M")
df['perc_change_'+x] = temp['perc_change']
time.sleep(300)
нет. один день в порядке, спасибо за помощь, проверю завтра, когда начнется прямая трансляция, и дам вам знать. еще раз спасибо
поскольку существует бесконечный цикл, я должен сохранить этот код и фрейм данных в каком-то другом файле python и оттуда получить к нему доступ в main.py, я создаю приложение фляги.
Я бы предложил запустить его отдельно, не нужно быть частью приложения фляги. Если вы хотите, мы можем добавить счетчик в цикл while, чтобы он выполнялся x раз (например, 288 за один день).
создание столбцов в фрейме данных служит только цели, нет необходимости записывать данные для превосходства
Даже если вы не хотите записывать данные в Excel, вы все равно должны читать файл Excel на каждой итерации, чтобы получить новые значения. В этом случае вы должны использовать отдельный фрейм данных, один для чтения excel, а другой для добавления дополнительных столбцов за 5 минут.
да, это правда, нужно читать excel на каждой итерации. я попытался запустить код ниже, в идеале он должен создать три новых столбца, верно? но для i в диапазоне (3) создается только один новый столбец: df = read_data() x=datetime.datetime.now().strftime("%H:%M:%S") df['perc_change_'+x ] = df['perc_change'] # write_data(df) time.sleep(5) print(df) почему так?
Действительно странно. Можете ли вы добавить print(x)
после x=datetime...etc и посмотреть, что будет напечатано? Все 3 x разные?
три разных значения x 19:53:55 19:54:00 19:54:05, но столбец все равно создается только для последнего значения
даже пробовал печатать df до того, как time.sleep(5) создается только последний столбец значений x
Это происходит потому, что мы читаем данные на каждой итерации. Я обновил код. Теперь он считывает данные в первый раз, сохраняет их в df, и на каждой итерации мы используем временный фрейм данных, чтобы снова прочитать excel и обновить df. Пожалуйста, попробуйте еще раз и дайте мне знать
да я тоже так думал, реализовал и прочитал комментарий, работает.
Давайте продолжим обсуждение в чате.
Когда вы говорите, что «эти ценности постоянно меняются», как они меняются и где берутся новые ценности?