J'ai un dataframe df:
>>> df
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20060630 6.590 NaN 6.590 5.291
20060930 10.103 NaN 10.103 7.981
20061231 15.915 NaN 15.915 12.686
20070331 3.196 NaN 3.196 2.710
20070630 7.907 NaN 7.907 6.459
Ensuite, je veux supprimer des lignes avec certains numéros de séquence qui ont indiqué dans une liste, supposons qu'il reste [1,2,4],
alors à gauche:
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20061231 15.915 NaN 15.915 12.686
20070630 7.907 NaN 7.907 6.459
Comment ou quelle fonction peut faire cela?
Réponses:
Utilisez DataFrame.drop et passez-lui une série d'étiquettes d'index:
la source
axis=0
(0 = lignes, 1 = colonnes) etinplace=True
comme dansdf.drop(df.index[[1,3]], axis=0, inplace=True)
. @mezzanaccio, si vous savez précisément quels index vous souhaitez remplacer (et aussi en utilisant votre exemple de 0 à n):df.drop(df.index[range(0, n)], axis=0, inplace=True)
Notez qu'il peut être important d'utiliser la commande "inplace" lorsque vous souhaitez effectuer le drop in line.
Parce que votre question d'origine ne renvoie rien, cette commande doit être utilisée. http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html
la source
Si le DataFrame est énorme et que le nombre de lignes à supprimer est également important, une simple suppression par index
df.drop(df.index[])
prend trop de temps.Dans mon cas, j'ai un DataFrame multi-indexé avec des flottants
100M rows x 3 cols
et je dois en supprimer des10k
lignes. La méthode la plus rapide que j'ai trouvée est, de manière assez contre-intuitive, pourtake
les lignes restantes.Soit
indexes_to_drop
un tableau d'index positionnels à supprimer ([1, 2, 4]
dans la question).Dans mon cas, cela prenait
20.5s
, tandis que le simpledf.drop
prenait5min 27s
et consommait beaucoup de mémoire. Le DataFrame résultant est le même.la source
Vous pouvez également passer à DataFrame.drop l' étiquette elle-même (au lieu de la série d'étiquettes d'index):
Ce qui équivaut à:
la source
J'ai résolu cela d'une manière plus simple - juste en 2 étapes.
Étape 1: commencez par former une trame de données avec des lignes / données indésirables.
Étape 2: utilisez l'index de cette trame de données indésirables pour supprimer les lignes de la trame de données d'origine.
Exemple:
Supposons que vous ayez un cadre de données df qui contient autant de colonnes que 'Age' qui est un entier. Supposons maintenant que vous souhaitiez supprimer toutes les lignes avec «Âge» comme nombre négatif.
Étape 1: df_age_negative = df [df ['Age'] <0]
Étape 2: df = df.drop (df_age_negative.index, axe = 0)
J'espère que cela est beaucoup plus simple et vous aide.
la source
Si je veux déposer une ligne qui a disons index
x
, je ferais ce qui suit:Si je veux supprimer plusieurs indices (disons que ces indices sont dans la liste
unwanted_indices
), je ferais:la source
Voici un exemple un peu précis, je voudrais montrer. Supposons que vous ayez plusieurs entrées en double dans certaines de vos lignes. Si vous avez des entrées de chaîne, vous pouvez facilement utiliser des méthodes de chaîne pour rechercher tous les index à supprimer.
Et maintenant, pour supprimer ces lignes en utilisant leurs index
la source
Dans un commentaire à la réponse de @ theodros-zelleke, @ j-jones a demandé ce qu'il fallait faire si l'index n'était pas unique. J'ai dû faire face à une telle situation. Ce que j'ai fait, c'était de renommer les doublons dans l'index avant d'appeler
drop()
, à la:où
rename_duplicates()
est une fonction que j'ai définie qui a parcouru les éléments d'index et renommé les doublons. J'ai utilisé le même modèle de changement de nom que celuipd.read_csv()
utilisé sur les colonnes, c'est-à-dire,"%s.%d" % (name, count)
oùname
est le nom de la ligne etcount
combien de fois il s'est produit précédemment.la source
Déterminer l'indice à partir du booléen comme décrit ci-dessus, par exemple
peut nécessiter plus de mémoire que la détermination de l'index à l'aide de cette méthode
appliqué comme ça
Cette méthode est utile pour traiter des trames de données volumineuses et une mémoire limitée.
la source
Utilisez uniquement l'argument Index pour supprimer la ligne: -
Pour plusieurs lignes: -
la source
Considérons un exemple de trame de données
nous voulons supprimer les 2e et 3e lignes d'index.
Approche 1:
Approche 2
la source