Ajouter une liste ou une série à un pandas DataFrame sous forme de ligne?
110
J'ai donc initialisé un pandas DataFrame vide et je voudrais ajouter de manière itérative des listes (ou des séries) sous forme de lignes dans ce DataFrame. Quelle est la meilleure façon de procéder?
Parfois, il est plus facile de faire tout l'ajout en dehors des pandas, puis de créer simplement le DataFrame en un seul coup.
>>>import pandas as pd
>>> simple_list=[['a','b']]>>> simple_list.append(['e','f'])>>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
col1 col2
0 a b
1 e f
Voici une solution plus simple et stupide: `` `` import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Notez que cet ajout ne se produit pas en place. ``
Jaidev Deshpande
27
Suite à la réponse de Mike Chirico ... si vous souhaitez ajouter une liste une fois que le dataframe est déjà rempli ...
>>> list =[['f','g']]>>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True)>>> df
col1 col2
0 a b
1 d e
2 f g
Crée-t-il une copie? Est-il possible d'ajouter en place?
lucid_dreamer
4
Si vous souhaitez ajouter une série et utiliser l'index de la série comme colonnes du DataFrame, il vous suffit d'ajouter la série entre crochets:
In[1]:import pandas as pd
In[2]: df = pd.DataFrame()In[3]: row=pd.Series([1,2,3],["A","B","C"])In[4]: row
Out[4]:
A 1
B 2
C 3
dtype: int64
In[5]: df.append([row],ignore_index=True)Out[5]:
A B C
0123[1 rows x 3 columns]
Sans cela, ignore_index=Truevous n'obtenez pas un index approprié.
Voici une fonction qui, étant donné un dataframe déjà créé, ajoutera une liste en tant que nouvelle ligne. Cela devrait probablement avoir des capteurs d'erreur, mais si vous savez exactement ce que vous ajoutez, cela ne devrait pas être un problème.
import pandas as pd
import numpy as np
def addRow(df,ls):"""
Given a dataframe and a list, append the list as a new row to the dataframe.
:param df: <DataFrame> The original dataframe
:param ls: <list> The new row to be added
:return: <DataFrame> The dataframe with the newly appended row
"""
numEl = len(ls)
newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))
df = df.append(newRow, ignore_index=True)return df
Réponses:
Parfois, il est plus facile de faire tout l'ajout en dehors des pandas, puis de créer simplement le DataFrame en un seul coup.
la source
la source
df
.Voici une solution simple et stupide:
la source
Pourriez-vous faire quelque chose comme ça?
Quelqu'un at-il une solution plus élégante?
la source
Suite à la réponse de Mike Chirico ... si vous souhaitez ajouter une liste une fois que le dataframe est déjà rempli ...
la source
Si vous souhaitez ajouter une série et utiliser l'index de la série comme colonnes du DataFrame, il vous suffit d'ajouter la série entre crochets:
Sans cela,
ignore_index=True
vous n'obtenez pas un index approprié.la source
Voici une fonction qui, étant donné un dataframe déjà créé, ajoutera une liste en tant que nouvelle ligne. Cela devrait probablement avoir des capteurs d'erreur, mais si vous savez exactement ce que vous ajoutez, cela ne devrait pas être un problème.
la source
La conversion de la liste en un bloc de données dans la fonction d'ajout fonctionne, même lorsqu'elle est appliquée dans une boucle
la source
utilisez simplement loc:
la source
Comme mentionné ici - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , vous devrez d'abord convertissez la liste en série, puis ajoutez la série au dataframe.
la source
Le moyen le plus simple:
Éditer:
N'oubliez pas que la longueur de la nouvelle liste doit être la même que celle du Dataframe correspondant.
la source