#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. Вы должны прочитать ссылку в предупреждающем сообщении, это очень подробно объясняет проблему