2017-10-20 8 views
2

J'utilise le code suivant pour créer une nouvelle colonne dans une trame de données:avertissement Python pandas géants de dataframe existe encore

# data is a dataframe object 
data.loc[:,'test'] = 5 

il est livré avec l'avertissement suivant:

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 

J'utilise déjà .loc[], pourquoi Y a-t-il encore un avertissement? Y a-t-il un point particulier qui me manque dans mon code? Merci!

+2

En général, vous devriez être en sécurité ici, ce que vous faites est la bonne façon d'aller à ce sujet. Mais y a-t-il des lignes _avant_ cette ligne qui référencent ou modifient 'df'? Il est probable que vous ayez utilisé l'indexation chaînée plus tôt dans votre code et que vous modifiez maintenant sur place cette copie. –

+2

Voir un exemple de ce dont je parle [ici] (https://stackoverflow.com/questions/23296282/what-rules-does-pandas-use-to-generate-a-view-vs-a-copy) avec l'exemple sur l'interrogation –

+0

Merci pour la perspicacité! En fait, j'ai découvert que j'avais utilisé l'indexation chaînée quelques lignes plus tôt. En supprimant ce problème d'indexation chaînée, mon code fonctionne désormais correctement. –

Répondre

0

Pourquoi ne pas faire,

>>> import pandas as pd 
>>> data = pd.DataFrame([[1, 0], [2, 4]], columns=['unit', 'test']) 
>>> data 
    unit test 
0  1  0 
1  2  4 
>>> data['test'] = 5 
>>> data 
    unit test 
0  1  5 
1  2  5 
>>> data['another_test'] = 6 
>>> data 
    unit test another_test 
0  1  5    6 
1  2  5    6