#python #pandas #dataframe #header #rows
#python #pandas #фрейм данных #заголовок #строки
Вопрос:
У меня есть фрейм данных, который выглядит следующим образом:
NDAQ NDAQ NDAQ NDAQ NDAQ Close_Price_Increase
open high low close volume
time
2020-08-26 09:30:00-04:00 130.71 130.87 130.39 130.86 1824
2020-08-26 09:45:00-04:00 131 131.71 131 131.22 3420
2020-08-26 10:00:00-04:00 131.13 131.13 130.76 130.76 508
... ... ... ... ... ...
Я бы хотел, чтобы это выглядело так:
Date Open High Low Close Volume Close_Price_Increase
2020-08-26 09:30:00-04:00 130.71 130.87 130.39 130.86 1824 ...
2020-08-26 09:45:00-04:00 131 131.71 131 131.22 3420 1
2020-08-26 10:00:00-04:00 131.13 131.13 130.76 130.76 508 0
... ... ... ... ... ... ...
Данные загружаются в этом формате. Я использую API Alpaca для загрузки указанных данных и преобразования в фрейм данных с помощью этого кода:
df_ticker = api_alpaca.get_barset(
symbols=['NDAQ'],
start=pd.Timestamp(str(df_transposed['Interval_Date'].iloc[0]) '-04:00', tz='America/New_York').isoformat(),
end=pd.Timestamp(str(df_transposed['Interval_Date'].iloc[-1]) '-04:00', tz='America/New_York').isoformat(),
timeframe='15Min'
).df
Я пытался:
df_ticker.rename(columns=df.iloc[0,2]).drop(df.index[0,2])
idx = df.Index(['time'], name='time')
idx.rename('Date')
безрезультатно.
Я также пытаюсь показать, увеличилась ли цена за данный интервал (обозначив его как 1) или уменьшилась (обозначив его как 0). Я пытался:
def getPrice():
i = 0
row = len(df_ticker)
for i in row:
if df_ticker['close'].iloc[i]> df_ticker['close'].iloc[i-1]:
i = i 1
return 1
else:
i = i 1
return 0
df_ticker.insert(loc=5, column='Price_Change', value=getPrice)
Я не думаю, что итерация по фрейму данных является самым мудрым выбором.
Ответ №1:
df=df.reset_index() #now your first column date should go as column
new_names=['Date','Open','High','Low','Close','Volume','Close_Price_Increase']
df.columns=new_names #now you should replace old column names, remeber that number of elements in list (new_names) should be equal to number of columns in your df
Комментарии:
1. Спасибо, но я получаю ValueError: несоответствие длины: ожидаемая ось имеет 11 элементов, новые значения имеют 7 элементов
2. как я уже упоминал, ваш список должен содержать такое же количество элементов, что и ваш фрейм данных. Кажется, что в вашем исходном фрейме данных 11 столбцов, поэтому в вашем
new_names
должно быть 11 элементов, а не 73. Я разобрался с именами заголовков. Спасибо. Есть ли шанс, что вы знаете, как сравнивать строки, чтобы показать увеличение / уменьшение?
4. если вы хотите показать увеличение и т.д. у вас должно быть два фрейма данных для сравнения, задайте другой вопрос или отредактируйте этот, с
pd.DataFrame(data)
которым мы можем работать
Ответ №2:
Решенное сравнение по строкам с:
df_ticker['Price_Change'] = np.where(df_ticker['Close'] >= df_ticker['Close'].shift(1), 1,0)