почему панды нарушают свои собственные предупреждения? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть некоторый код, касающийся панд 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

Мне просто странно, что в предупреждении не упоминается мой код, откуда мне знать, откуда появляется предупреждение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...