Drop ligne dans les Pandas de la Série et de nettoyer les index
J'ai une Pandas Série et basé sur un nombre aléatoire je veux choisir une ligne (5 dans l'exemple de code ci-dessous) et de la baisse de la ligne. Lorsque la ligne est abandonnée je veux créer un nouvel index pour les lignes restantes (0 à 8). Le code ci-dessous:
print 'Original series: ', sample_mean_series
print 'Length of original series', len(sample_mean_series)
sample_mean_series = sample_mean_series.drop([5],axis=0)
print 'Series with item 5 dropped: ', sample_mean_series
print 'Length of modified series:', len(sample_mean_series)
print sample_mean_series.reindex(range(len(sample_mean_series)))
Et c'est la sortie:
Original series:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 -0.000051
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of original series 10
Series with item 5 dropped:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of modified series: 9
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 NaN
6 0.000125
7 -0.000108
8 -0.000009
Mon problème est que la ligne numéro 8 est supprimé. Je souhaite supprimer la ligne "5 NaN" et de garder -0.000052 avec un indice de 0 à 8. C'est ce que je veux qu'il ressemble:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 0.000125
6 -0.000108
7 -0.000009
8 -0.000052
OriginalL'auteur Jonas | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Un peu prêter à confusion,
reindex
ne signifie pas "créer un nouvel index". Pour créer un nouvel index, tout de céder à laindex
attribut. Donc, à votre dernière étape, il suffit de nesample_mean_series.index = range(len(sample_mean_series))
.Oui, c'est principalement ça. À l'aide de
reindex[blah]
juste sélectionne des lignes, un peu comme fairedf.ix[blah]
, et comme ça il vous donne NaN, si ceux que vous demandez n'existe pas. Elle a quelques options pour remplir les NaNs, mais je n'ai jamais vraiment compris le point de réindexer, sans parler de son nom.en fait, il y a un reset_index méthode qui numérote automatiquement les lignes pour vous.
OriginalL'auteur BrenBarn
Voici un one-liner:
- Je utiliser le
Series.drop
méthode à la baisse de la ligne 5 et ensuite utiliserreset_index
de re-numéroter les indices consécutifs. Sans l'aide dereset_index
, les indices de sauter de 4 à 6 par pas de 5.Par défaut,
reset_index
permettra de déplacer l'index d'origine dans unDataFrame
et de retour aux côtés de la série de valeurs. En passantdrop=True
empêche que cela se produise.J'ai expliqué ma réponse et mis à jour pour être plus clair.
OriginalL'auteur Zelazny7