Anhängen einer Liste oder Serie an einen Pandas DataFrame als Zeile?

107

Daher habe ich einen leeren Pandas-DataFrame initialisiert und möchte Listen (oder Serien) iterativ als Zeilen in diesem DataFrame anhängen. Was ist der beste Weg, dies zu tun?

Wes Field
quelle
Bessere Antworten finden Sie unter: stackoverflow.com/questions/10715965/…
Yuval Atzmon

Antworten:

132

Manchmal ist es einfacher, alle Anhänge außerhalb von Pandas durchzuführen. Erstellen Sie dann einfach den DataFrame auf einmal.

>>> 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
quelle
21
Schlechte Praxis, eine Variable zu benennen list. Sie haben den listKonstruktor gerade überschrieben .
Jason Strimpel
1
Die Frage scheint zu implizieren, dass nicht alle Zeilen im Voraus bekannt sind.
DISC-O
102
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Ashot Matevosyan
quelle
8
Dies ist am einfachsten, wenn Sie am Ende des hinzufügen möchten df.
Sid
2
Genau das wollte ich, so einfach und doch so effektiv!
MSalty
3
Warum ist dies nicht die ausgewählte Antwort?
Lucas Azevedo
Dies ist im Allgemeinen in Ordnung, funktioniert aber nur, wenn Sie einen monoton ansteigenden Index haben, der bei 0 begann.
Dreab
59

Hier ist eine einfache und dumme Lösung:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
Jaidev Deshpande
quelle
25
Beachten Sie, dass dies ein
Diktat anhängt
36

Könnten Sie so etwas tun?

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

Hat jemand eine elegantere Lösung?

Alex Woolford
quelle
1
Hier ist eine einfachere und dumme Lösung: `` `Pandas importieren als pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Beachten Sie, dass dies angehängt wird passiert nicht an Ort und Stelle. `` `
Jaidev Deshpande
27

Folgen Sie der Antwort von Mike Chirico ... wenn Sie eine Liste anhängen möchten, nachdem der Datenrahmen bereits ausgefüllt ist ...

>>> 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
quelle
Erstellt es eine Kopie? Ist es möglich, an Ort und Stelle anzuhängen?
lucid_dreamer
4

Wenn Sie eine Serie hinzufügen und den Serienindex als Spalten des DataFrame verwenden möchten, müssen Sie die Serie nur in Klammern anhängen:

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]

Ohne dass ignore_index=TrueSie nicht den richtigen Index erhalten.

bmello
quelle
4

Hier ist eine Funktion, die bei einem bereits erstellten Datenrahmen eine Liste als neue Zeile anfügt. Dies sollte wahrscheinlich Fehlerfänger enthalten, aber wenn Sie genau wissen, was Sie hinzufügen, sollte dies kein Problem sein.

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

Das Konvertieren der Liste in einen Datenrahmen innerhalb der Append-Funktion funktioniert auch, wenn sie in einer Schleife angewendet wird

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

benutze einfach 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
quelle
0

Der einfachste Weg:

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

Bearbeiten:

Vergessen Sie nicht, dass die Länge der neuen Liste mit der des entsprechenden Datenrahmens übereinstimmen sollte.

Ghanem
quelle