Maison >développement back-end >Tutoriel Python >Pourquoi « DataFrame.append » est-il obsolète et comment ajouter des lignes à un DataFrame Pandas ?

Pourquoi « DataFrame.append » est-il obsolète et comment ajouter des lignes à un DataFrame Pandas ?

DDD
DDDoriginal
2024-12-05 21:38:15829parcourir

Why is `DataFrame.append` Deprecated and How Do I Add Rows to a Pandas DataFrame?

Erreur : l'objet 'DataFrame' n'a pas d'attribut 'append'

Lors de la tentative d'ajout d'un dictionnaire à un objet DataFrame, les utilisateurs peuvent rencontrer le message d'erreur "AttributeError : l'objet 'DataFrame' n'a pas d'attribut 'append'." Alors que DataFrame était auparavant équipé de la méthode append, elle a été supprimée dans la version 2.0 de pandas.

Solution

Pour ajouter des données à un DataFrame, utilisez plutôt la méthode concat :

df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)

Alternative Solution

Si l'index est un RangeIndex, l'attribut loc peut également être utilisé :

df.loc[len(df)] = new_row # Note: Only use with a RangeIndex!

Pourquoi le changement ?

La méthode append a été supprimée car il s’agissait d’une opération inefficace, surtout lorsqu’elle était répétée. Contrairement à list.append, qui fonctionne sur place, l'ajout de DataFrame a créé un nouveau DataFrame. Cela rendait les opérations d'insertion répétées quadratiques en termes de complexité temporelle.

Meilleures pratiques pour les insertions répétées

Au lieu d'utiliser append ou concat à plusieurs reprises, collectez les nouveaux éléments dans une liste et convertissez-les. vers un DataFrame à la fin de la boucle. Ensuite, concaténez le nouveau DataFrame à l'original.

lst = []

for new_row in items_generation_logic:
    lst.append(new_row)

# create extension
df_extended = pd.DataFrame(lst, columns=['A', 'B', 'C'])

# concatenate to original
out = pd.concat([df, df_extended])

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn