Возврат представления вместо копии. Значение пытается установить копию фрагмента из DataFrame. Попробуйте использовать .Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Возврат представления вместо копии. Значение пытается установить копию фрагмента из DataFrame. Попробуйте использовать .

Сообщение Anonymous »

Я скачал данные о ценах и объемах торгов акциями с сайта Yahoo Finance (yfinance). Затем я создал фрейм данных Closes с данными о ценах закрытия и объеме (я удалил ненужную информацию). Затем я хочу добавить столбцы в фрейм данных Closes с расчетом среднего объема за год, квартал, месяц и неделю. Но при выполнении кода появляется предупреждение: «Значение пытается быть установлено в копии среза из DataFrame. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value». Я прочитал эту статью "https://pandas.pydata.org/pandas-docs/s ... sus-a-copy", но не понял, что мне делать в моя ситуация. Я хочу, чтобы предупреждение было устранено, а вычисления в добавленных столбцах выполнялись правильно.
Как мне устранить это предупреждение (не игнорировать его, а исправить)?

Код: Выделить всё

import yfinance as yf
import pandas as pd
import warnings
warnings.filterwarnings("ignore", message="The 'unit' keyword in TimedeltaIndex construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.", category=FutureWarning, module="yfinance.utils")
warnings.filterwarnings("ignore", category=pd.errors.PerformanceWarning)
#warnings.filterwarnings("ignore", message="DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`", category=pd.errors.PerformanceWarning)

TickersList=['A', 'AAL', 'AAPL', 'ABBV', 'ABNB', 'ABT', 'ACGL', 'ACN', 'ADBE', 'ADI', 'ADM']
Stocks=yf.download(TickersList[0::1], period="1y", interval="1d", group_by='ticker')
Stocks.sort_index(level=0,axis=1,inplace=True)
Closes=Stocks.loc[:, (slice(None), ['Close', 'Volume'])]
for i in Closes.columns.get_level_values(0):
Closes.loc[:,(i,'Meam1Y')]=Closes.loc[:,(i,'Volume')].rolling (250).mean()
Closes.loc[:,(i,'Meam1Q')]=Closes.loc[:,(i,'Volume')].rolling (62).mean()
Closes.loc[:,(i,'Meam1M')]=Closes.loc[:,(i,'Volume')].rolling (20).mean()
Closes.loc[:,(i,'Meam1W')]=Closes.loc[:,(i,'Volume')].rolling (5).mean()
Closes
Полный текст предупреждения:
См. предостережения в документации: https://pandas.pydata.org/pandas-docs/stable/user_guide. /indexing.html#returning-a-view-versus-a-copy
Closes.loc[:,(i,'Meam1Y')]=Closes.loc[:,(i,'Volume')]. rolling (250).mean()
C:\Users\iiiva\AppData\Local\Temp\ipykernel_27188\26776804.py:4: SettingWithCopyWarning:
Значение пытается установиться в копии фрагмент из DataFrame.
Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value

Подробнее здесь: https://stackoverflow.com/questions/788 ... of-a-slice
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»