J'ai un dataframe:
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
A B C
0 5 6 7
1 7 8 9
[2 rows x 3 columns]
et je dois ajouter une première ligne [2, 3, 4] pour obtenir:
A B C
0 2 3 4
1 5 6 7
2 7 8 9
J'ai essayé append()
et concat()
fonctionne mais je ne trouve pas la bonne façon de le faire.
Comment ajouter / insérer des séries dans dataframe?
s1.values
plutôtlist(s1)
que de créer une liste entièrement nouvelle en utilisantlist(s1)
.Réponses:
Attribuez simplement une ligne à un index particulier, en utilisant
loc
:Et vous obtenez, comme vous le souhaitez:
Voir dans la documentation Pandas Indexation: Réglage avec agrandissement .
la source
df.loc[-1] = df.iloc[[0]]
, et l'insérer? Le cadre est livré avec une colonne d'index supplémentaire donnant une erreurValueError: cannot set a row with mismatched columns
(voir stackoverflow.com/questions/47340571/… )df.loc[-1] = [2, 3, 4] # adding a row
c'est un peu trompeur,-1
pas plus que la dernière ligne / élément, comme c'est le cas pour les tableaux Python.Je ne sais pas comment vous appeliez,
concat()
mais cela devrait fonctionner tant que les deux objets sont du même type. Peut-être que le problème est que vous devez convertir votre deuxième vecteur dans une trame de données? L'utilisation du df que vous avez défini fonctionne pour moi:la source
Une façon d'y parvenir est
En général, il est plus facile d'ajouter des dataframes, pas des séries. Dans votre cas, puisque vous voulez que la nouvelle ligne soit "en haut" (avec l'identifiant de départ), et qu'il n'y a pas de fonction
pd.prepend()
, je crée d'abord la nouvelle dataframe, puis j'ajoute l'ancienne.ignore_index
ignorera l'ancien index en cours dans votre dataframe et s'assurera que la première ligne commence réellement par index1
au lieu de redémarrer avec index0
.Avertissement typique: Cetero censeo ... l'ajout de lignes est une opération assez inefficace. Si vous vous souciez des performances et que vous pouvez en quelque sorte vous assurer de créer d'abord un dataframe avec l'index correct (plus long), puis d' insérer simplement la ligne supplémentaire dans le dataframe, vous devez absolument le faire. Voir:
Jusqu'à présent, nous avons ce que vous aviez comme
df
:Mais maintenant, vous pouvez facilement insérer la ligne comme suit. Puisque l'espace a été préalloué, c'est plus efficace.
la source
J'ai mis en place une fonction courte qui permet un peu plus de flexibilité lors de l'insertion d'une ligne:
qui pourrait être abrégé en:
Ensuite, vous pouvez utiliser quelque chose comme:
où
2
est la position d'index à l'df
endroit où vous souhaitez insérerdf_new
.la source
Nous pouvons utiliser
numpy.insert
. Cela présente l'avantage de la flexibilité. Il vous suffit de spécifier l'index dans lequel vous souhaitez insérer.Pour
np.insert(df.values, 0, values=[2, 3, 4], axis=0)
, 0 indique à la fonction l'emplacement / l'index dans lequel vous souhaitez placer les nouvelles valeurs.la source
cela peut sembler trop simple mais c'est incroyable qu'une simple fonction d'insertion de nouvelle ligne ne soit pas intégrée. J'ai beaucoup lu sur l'ajout d'un nouveau df à l'original, mais je me demande si ce serait plus rapide.
la source
Vous trouverez ci-dessous le meilleur moyen d'insérer une ligne dans le cadre de données pandas sans trier et réinitialiser un index:
la source
Il est assez simple d'ajouter une ligne dans un pandas
DataFrame
:Créez un dictionnaire Python régulier avec les mêmes noms de colonnes que votre
Dataframe
;Utilisez
pandas.append()
method et transmettez le nom de votre dictionnaire, où.append()
est une méthode sur les instances DataFrame;Ajoutez
ignore_index=True
juste après le nom de votre dictionnaire.la source
concat()
semble être un peu plus rapide que l'insertion et la réindexation de la dernière ligne. Au cas où quelqu'un s'interrogerait sur la vitesse de deux approches principales:17,1 s ± 705 ms par boucle (moyenne ± écart standard de 7 courses, 1 boucle chacune)
6,53 s ± 127 ms par boucle (moyenne ± écart standard de 7 courses, 1 boucle chacune)
la source
Vous pouvez simplement ajouter la ligne à la fin du DataFrame, puis ajuster l'index.
Par exemple:
Ou utilisez
concat
comme:la source
Le moyen le plus simple d'ajouter une ligne dans une trame de données pandas est:
Exemple :
NB: la longueur de votre liste doit correspondre à celle de la trame de données.
la source