#python #pandas
#python #pandas
Вопрос:
У меня есть программа, которая предоставляет мне информацию о запасах, когда я даю ей входной файл.
Этот файл перебирает каждую строку и выполняет некоторые простые вычисления.
for index, row in df.iterrows():
ticker=row['Ticker']
ticker_stock = yf.Ticker(ticker.strip())
data = ticker_stock.history()
row['Price'] = (data.tail(1)['Close'].iloc[0])
#Print Stock Name
stockName = ticker_stock.info['longName']
print(stockName)
print(row['Ticker'], row['Price'])
row['Value'] = row['BuyPrice'] * row['BuyAmount']
print(row['Value'])
row.to_csv('balance.csv')
Я хочу сохранить файл после выполнения вычислений, но формат отличается.
Вот пример входного файла:
0,Ticker,BuyPrice,BuyAmount,Value,Price
1,MSFT,4832,4,43,456
И вот выходной файл, созданный программой.
,2
Ticker,MSFT
BuyPrice,4832.0
BuyAmount,4
Value,19328.0
Price,215.80999755859375
Есть ли способ сохранить файл, сохранив исходный формат? Понятно, что если я захочу перезапустить программу, она не будет работать. Поскольку строки теперь являются столбцами.
Ответ №1:
Вот исправленный код:
for index, row in df.iterrows():
ticker=row['Ticker']
ticker_stock = yf.Ticker(ticker.strip())
data = ticker_stock.history()
df.loc[index, 'Price'] = (data.tail(1)['Close'].iloc[0])
#Print Stock Name
stockName = ticker_stock.info['longName']
print(stockName)
print(df.loc[index, 'Ticker'], df.loc[index, 'Price'])
df.loc[index, 'Value'] = row['BuyPrice'] * row['BuyAmount']
print(df.loc[index, 'Value'])
df.to_csv('balance.csv')
Изменения:
- выведите to_csv за пределы цикла
- вы to_csv только один раз и DF
- обновление значения с помощью df.loc[index, ]
Комментарии:
1. Это работает для сохранения правильного форматирования, но не сохраняет правильные данные. На самом деле, файл, похоже, ничего не сохраняет. Например, цена, которую я получаю в цикле, не сохраняется. Я думаю, это потому
row['Price']
, что вычисляется, но неdf['Price']