web-dev-qa-db-fra.com

Ajouter une liste ou une série à un pandas DataFrame en tant que ligne?

J'ai donc initialisé un DataFrame pandas 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 faire cela?

75
Wes Field

Parfois, il est plus facile de faire toutes les ajouts en dehors des pandas, il suffit alors de créer le DataFrame en une seule fois.

>>> 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
95
Mike Chirico

Voici une solution simple et stupide:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
54
Jaidev Deshpande
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
48
Ashot Matevosyan

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 a-t-il une solution plus élégante?

31
Alex Woolford

Suite à la réponse de Mike Chirico ... si vous souhaitez ajouter une liste après le cadre de données 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
24
Jay Marm

Voici une fonction qui, étant donné une image déjà créée, ajoutera une liste en tant que nouvelle ligne. Cela devrait probablement comporter 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
jadki

Si vous souhaitez ajouter une série et utiliser l'index de la série en tant que 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 le ignore_index=True vous n’obtenez pas d’index approprié.

3
bmello

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
2
Qinsi

Le moyen le plus simple:

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

Modifier:

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

1
Ghanem