Aggiungere un elenco o una serie a un DataFrame panda come una riga?


Risposte:


133

A volte è più facile fare tutte le aggiunte al di fuori dei panda, quindi, basta creare il DataFrame in un colpo solo.

>>> 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 domanda sembra implicare che non tutte le righe siano note in anticipo.
DISC-O

103
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

8
Questo è il più semplice se stai cercando di aggiungere alla fine del file df.
Sid

2
Questo è esattamente quello che volevo, così semplice ma efficace!
MSalty

3
Perché questa non è la risposta selezionata?
Lucas Azevedo

Questo è generalmente ok, ma funziona solo se hai un indice in aumento monotono che inizia da 0.
dreab

59

Ecco una soluzione semplice e stupida:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

25
Nota che questo sta aggiungendo un dict, non un elenco
anthnyprschka

36

Potresti fare qualcosa di simile?

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

Qualcuno ha una soluzione più elegante?


1
Ecco una soluzione più semplice e stupida: `` `` import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Nota che questo appending non accade sul posto. ``
Jaidev Deshpande

27

Seguendo la risposta di Mike Chirico ... se vuoi aggiungere un elenco dopo che il dataframe è già popolato ...

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

Crea una copia? È possibile aggiungere sul posto?
lucid_dreamer

4

Se vuoi aggiungere una serie e utilizzare l'indice della serie come colonne del DataFrame, devi solo aggiungere la serie tra parentesi:

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]

Senza il ignore_index=Truetuo indice corretto.


4

Ecco una funzione che, dato un dataframe già creato, aggiungerà un elenco come una nuova riga. Questo dovrebbe probabilmente contenere dei rilevatori di errori, ma se sai esattamente cosa stai aggiungendo, non dovrebbe essere un problema.

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 conversione dell'elenco in un frame di dati all'interno della funzione di aggiunta funziona, anche se applicata in un ciclo

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

2

usa semplicemente 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

Il modo più semplice:

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

Modificare:

Non dimenticare che la lunghezza del nuovo elenco dovrebbe essere la stessa del Dataframe corrispondente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.