Досадные панды SettingWithCopyWarning, даже попробовал loc [;,] - PullRequest
0 голосов
/ 11 мая 2018
code_null.loc[:,'code'] = code_null['blockname'].apply(__f,args=(code_name,))

def __f(x, df):
    #markets = ['A','B']
    markets = ['A']
    for market in markets:
        code = df.loc[df.name==x,'code'].tolist()
    if code:
        return ','.join(code)
    else:
        return np.nan

Всегда получаю SettingWithCopyWarning,

.virtualenv/python3/lib/python3.6/site-packages/pandas/core/indexing.py:537: 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

Также пробовал:

 code_null.loc[:,'code'] = code_null.loc[:,'blockname'].apply(__f,args=(code_name,))

Но получил то же предупреждение.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Попробуйте использовать:

code_null.loc[:,(code)] = code_null[(blockname)].apply(__f,args=(code_name,))

Метод копирования не является предпочтительным:

Метод .copy() не гарантируется и его следует избегать в соответствии с DOCS

Предпочтительный метод из документов:

dfc = pd.DataFrame({'A':['aaa','bbb','ccc'],'B':[1,2,3]})

dfc.loc[0,'A'] = 11

dfc
     A  B
0   11  1
1  bbb  2
2  ccc  3
0 голосов
/ 11 мая 2018
code_null.loc[:,'code'] = code_null['blockname'].apply(__f,args=(code_name,)).copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...