Comment puis-je:
J'ai essayé:
y = dataframe.iloc[:,-3:]
J'ai essayé:
X = dataframe.iloc[:,:-3]
Est-ce correct?
J'obtiens des erreurs dimensionnelles de tableau dans mon code et je veux m'assurer que cette étape est correcte.
Je vous remercie
il suffit de faire:
y = dataframe[dataframe.columns[-3:]]
Cela coupe les colonnes afin que vous puissiez sous-sélectionner à partir de la df
Exemple:
In [221]:
df = pd.DataFrame(columns=np.arange(10))
df[df.columns[-3:]]
Out[221]:
Empty DataFrame
Columns: [7, 8, 9]
Index: []
Je pense que le problème ici est que, parce que vous avez pris une partie de la df, elle est retournée à une vue, mais en fonction de ce que fait le reste de votre code, cela déclenche un avertissement. Vous pouvez faire une copie explicite en appelant .copy()
pour supprimer les avertissements.
Donc, si nous prenons une copie, l’affectation n’affecte que la copie et non l’original df:
In [15]:
df = pd.DataFrame(np.random.randn(5,10), columns= np.arange(10))
df
Out[15]:
0 1 2 3 4 5 6 \
0 0.568284 -1.488447 0.970365 -1.406463 -0.413750 -0.934892 -1.421308
1 1.186414 -0.417366 -1.007509 -1.620530 -1.322004 0.294540 1.205115
2 -1.073894 -0.214972 1.516563 -0.705571 0.068666 1.690654 -0.252485
3 0.923524 -0.856752 0.226294 -0.660085 1.259145 0.400596 0.559028
4 0.259807 0.135300 1.130347 -0.317305 -1.031875 0.232262 0.709244
7 8 9
0 1.741925 -0.475619 -0.525770
1 2.137546 0.215665 1.908362
2 1.180281 -0.144652 0.870887
3 -0.609804 -0.833186 -1.033656
4 0.480943 1.971933 1.928037
In [16]:
y = df[df.columns[-3:]].copy()
y
Out[16]:
7 8 9
0 1.741925 -0.475619 -0.525770
1 2.137546 0.215665 1.908362
2 1.180281 -0.144652 0.870887
3 -0.609804 -0.833186 -1.033656
4 0.480943 1.971933 1.928037
In [17]:
y[y>0] = 0
print(y)
df
7 8 9
0 0.000000 -0.475619 -0.525770
1 0.000000 0.000000 0.000000
2 0.000000 -0.144652 0.000000
3 -0.609804 -0.833186 -1.033656
4 0.000000 0.000000 0.000000
Out[17]:
0 1 2 3 4 5 6 \
0 0.568284 -1.488447 0.970365 -1.406463 -0.413750 -0.934892 -1.421308
1 1.186414 -0.417366 -1.007509 -1.620530 -1.322004 0.294540 1.205115
2 -1.073894 -0.214972 1.516563 -0.705571 0.068666 1.690654 -0.252485
3 0.923524 -0.856752 0.226294 -0.660085 1.259145 0.400596 0.559028
4 0.259807 0.135300 1.130347 -0.317305 -1.031875 0.232262 0.709244
7 8 9
0 1.741925 -0.475619 -0.525770
1 2.137546 0.215665 1.908362
2 1.180281 -0.144652 0.870887
3 -0.609804 -0.833186 -1.033656
4 0.480943 1.971933 1.928037
Ici, aucun avertissement n’est émis et le format de fichier original n’a pas été modifié.
Ceci est dû à l’utilisation d’indices entiers (ix sélectionne ceux-ci par libellé sur -3 plutôt que par position, et c’est par leur conception: reportez-vous à l’indexation des entiers dans les pandas "gotchas" *).
* Dans les nouvelles versions de pandas, préférez loc ou iloc pour supprimer l'ambiguïté d'ix en tant que position ou libellé:
df.iloc [-3:] voir la documentation.
Comme le souligne Wes, dans ce cas précis, vous devriez simplement utiliser la queue!
Il convient également de noter que dans les Pandas antérieurs à la version 0.14, iloc générera une erreur IndexError sur un accès hors limites, tandis que .head () et .tail () ne:
pd. version «0,12,0» df = pd.DataFrame ([{"a": 1}, {"a": 2}]) df.iloc [-5:] ... IndexError: hors limites sur la tranche (fin) df.tail (5) une 0 1 1 2 Ancienne réponse (méthode dépréciée):
Vous pouvez utiliser la méthode irows DataFrame pour surmonter cette ambiguïté:
Dans [11]: df1.irow (tranche (-3, Aucun)) Out [11]: STK_ID RPT_Date TCossez la réduction sur les ventes 8 568 20080331 38,75 12,668 NaN 9 568 20080630 30.09 21.102 NaN 10 568 20080930 26,00 30,769 NaN