Ajouter une liste ou une série à un pandas DataFrame sous forme de ligne?


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

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]

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)

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?


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

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é.


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

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]))

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.