Почему я получаю запрос при манипулировании df, созданным из другого df

#python #sql #pandas

Вопрос:

У меня есть следующие коды:

 #converts SQLite data to a Panda data frame df1 = pd.read_sql_query("SELECT * FROM Accounts", conn) df2 = pd.read_sql_query("SELECT * FROM Rates", conn) df3 = pd.read_sql_query("SELECT * FROM Clients", conn)  #Create new data frame as working space dfnew= df1[['Client','Product','CCY','Balance']]  #map Currency code dfnew['fxrate'] = dfnew.CCY.map(df2.set_index('Currency code')['Rate'])  dfnew.head()  

Когда я запускаю результаты, результат соответствует ожиданиям. Однако я получаю сообщение ниже:

 C:ProgramDataAnaconda3libsite-packagesipykernel_launcher.py:14: SettingWithCopyWarning:  A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead  See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy  

Что это значит? Что-то не так с моим кодом?

Ответ №1:

dfnew-это не новый фрейм данных, а представление df1

Вам следует сделать копию:

 #Create new data frame as working space dfnew = df1[['Client','Product','CCY','Balance']].copy()  

nb. Вы должны прочитать ссылку в предупреждающем сообщении, это очень подробно объясняет проблему