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


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

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]

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)

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?


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

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.


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

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

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.