У меня есть некоторый код, касающийся панд DataFrames.
Когда я запускаю этот код, я получаю множество SettingsWithCopyWarning
с.
Все предупреждения исходят от самой кодовой базы панд. Это сбивает меня с толку.
Я обновил панд, поэтому я не думаю, что это проблема с версией.
Я неправильно пользуюсь пандами? Все получают эти предупреждения? Если так, я должен выключить их? Как бы я это сделал?
Вот пример вывода, который я получаю, когда моя программа работает (это не вызывает остановки моей программы):
...
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:362: 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
self.obj[key] = _infer_fill_value(value)
...
...
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:543: 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
self.obj[item] = s
...
Я предполагаю, что pandas\core\indexing.py:543
относится к строке в кодовой базе панд, которая нарушает это руководство и вызывает ошибку? Это предположение верно? Я предполагаю это, потому что он не ссылается ни на одну строку в моей кодовой базе.
Если это предположение неверно, я могу предоставить строки из моей кодовой базы.
Спасибо.
EDIT:
Моя версия Панд:
>pip show pandas
Name: pandas
Version: 0.23.4
Моя версия python:
>python
Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32
Мой код ниже не дословный, потому что он длинный и сложный, но я думаю, что я вынул типичный пример того, что может вызвать это.
Пример моего кода:
# I create a dask workflow and send a dataframe through it.
def binning_workflow(df: pd.DataFrame, bins: dict) -> pd.DataFrame:
workflow = {
...
'bin_customs_osha': (bin_customs_data, 'bin_something_else',),
...
}
return dask.multiprocessing.get(workflow, 'merge_binned_columns_10')
# a function called during dask workflow
def bin_customs_data(df):
cols = ['OSHA_GRAVITY', 'OSHA_OPEN_DATE',]
for v in cols:
if v in df.columns:
df.loc[:, v] = df[v].apply(lambda x: 'unknown' if x == -1 else x).astype(str)
df.loc[:, 'OSHA_PENALTIES_IND_BIN'] = 0
df.loc[df['NAICS_SECTOR_DESCRIPTION'] != 'Construction', 'OSHA_PENALTIES_IND_BIN'] = df['OSHA_PENALTIES_IND'].astype(str) + ' not const'
return df
Мне просто странно, что в предупреждении не упоминается мой код, откуда мне знать, откуда появляется предупреждение?