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?

Wes Field
la source
De meilleures réponses peuvent être trouvées sous: stackoverflow.com/questions/10715965/…
Yuval Atzmon

Réponses:

134

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
Mike Chirico
la source
1
La question semble impliquer que toutes les lignes ne sont pas connues à l'avance.
DISC-O
104
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Ashot Matevosyan
la source
8
C'est le plus simple si vous cherchez à ajouter à la fin du fichier df.
Sid
2
C'est exactement ce que je voulais, si simple mais efficace!
MSalty
3
Pourquoi n'est-ce pas la réponse choisie?
Lucas Azevedo
1
Ceci est généralement correct mais ne fonctionne que si vous avez un index monotone croissant commençant à 0.
dreab
60

Voici une solution simple et stupide:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Jaidev Deshpande
la source
26
Notez que cela ajoute un dict, pas une liste
anthnyprschka
36

Pourriez-vous faire quelque chose comme ça?

>>> import pandas as pd
>>> df = pd.DataFrame(columns=['col1', 'col2'])
>>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
>>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True) 
>>> df
  col1 col2
0    a    b
1    d    e

Quelqu'un at-il une solution plus élégante?

Alex Woolford
la source
1
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
Jay Marm
la source
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
0  1  2  3

[1 rows x 3 columns]

Sans cela, ignore_index=Truevous n'obtenez pas un index approprié.

bmello
la source
4

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
jadki
la source
3

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

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))
janfelix
la source
2

utilisez simplement loc:

>>> df
     A  B  C
one  1  2  3
>>> df.loc["two"] = [4,5,6]
>>> df
     A  B  C
one  1  2  3
two  4  5  6
Qinsi
la source
0

Le moyen le plus simple:

my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values

Éditer:

N'oubliez pas que la longueur de la nouvelle liste doit être la même que celle du Dataframe correspondant.

Ghanem
la source