Empêchez les avertissements suivants d'apparaître! (Le code qui donne cet avertissement est indiqué ci-dessous)
aa.py:5: 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 the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
d['col3']= d['col2'] * 3
col1 col2 col3
0 1 2 6
2 1 2 6
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
dfmi.loc[:,('one','second')] = value
# becomes
dfmi.loc.__setitem__((slice(None), ('one', 'second')), value)
Il est écrit.
aa.py
import pandas as pd
data = pd.DataFrame([[1,2],[2,3],[1,2],[2,3]], columns=['col1','col2'])
d = data[data['col1'] == 1]
d['col3']= d['col2'] * 3
print(d)
Si vous faites cela, vous obtiendrez l'avertissement ci-dessus.
Le problème réside dans la ligne suivante.
d = data[data['col1'] == 1]
S'il s'agit de «d = data», l'avertissement ci-dessus n'est pas disponible.
Puisque les données ont des valeurs autres que col1 == 1, si vous essayez d'ajouter une nouvelle colonne au DF qui a été découpée par col1 == 1, ce sera étrange, alors faites-en une copie et seulement col1 == 1 à l'avance Faites juste un DF.
modifié
d = data[data['aa'] == 2].copy()
Utilisez .loc
comme pris en charge dans le lien ci-dessus et mettez à jour uniquement la partie correspondante.
modifié
#Mettez Value (côté droit) dans col3 (nouvelle colonne) bien que col1 remplisse la condition de 1.
data.loc[data['col1'] == 1, 'col3'] = data['col2'] * 3
#Extraire uniquement la partie où col1 est 1 à partir des données
d = data[data['col1'] == 1]
print('data:\n %s' % data)
print('d:\n%s' % d)
résultat
data:
col1 col2 col3
0 1 2 6
1 2 3 NaN
2 1 2 6
3 2 3 NaN
d:
col1 col2 col3
0 1 2 6
2 1 2 6
Recommended Posts