391 Stimmen

Wie füge ich eine Spalte an einem bestimmten Spaltenindex in Pandas ein?

Kann ich in Pandas eine Spalte an einem bestimmten Spaltenindex einfügen?

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

Dies platziert Spalte n als letzte Spalte von df, aber gibt es keine Möglichkeit, df mitzuteilen, n am Anfang zu platzieren?

688voto

Jeff Punkte 123194

Siehe Dokumente: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html

Bei Verwendung von loc = 0 wird am Anfang eingefügt

df.insert(loc, Spalte, Wert)

df = pd.DataFrame({'B': [1, 2, 3], 'C': [4, 5, 6]})

df
Out: 
   B  C
0  1  4
1  2  5
2  3  6

idx = 0
new_col = [7, 8, 9]  # kann eine Liste, eine Serie, ein Array oder ein Skalar sein
df.insert(loc=idx, column='A', value=new_col)

df
Out: 
   A  B  C
0  7  1  4
1  8  2  5
2  9  3  6

73voto

Hugo Vares Punkte 767

Wenn Sie für alle Zeilen einen einzelnen Wert möchten:

df.insert(0,'name_of_column','')
df['name_of_column'] = value

Bearbeiten:

Sie können auch:

df.insert(0,'name_of_column',value)

19voto

mhc Punkte 289
df.insert(loc, Spaltenname, Wert)

Dies funktioniert, wenn es keine andere Spalte mit dem gleichen Namen gibt. Wenn eine Spalte mit Ihrem angegebenen Namen bereits im DataFrame existiert, wird ein ValueError ausgelöst.

Sie können einen optionalen Parameter allow_duplicates mit dem Wert True übergeben, um eine neue Spalte mit einem bereits vorhandenen Spaltennamen zu erstellen.

Hier ist ein Beispiel:

    >>> df = pd.DataFrame({'b': [1, 2], 'c': [3,4]})
    >>> df
       b  c
    0  1  3
    1  2  4
    >>> df.insert(0, 'a', -1)
    >>> df
       a  b  c
    0 -1  1  3
    1 -1  2  4
    >>> df.insert(0, 'a', -2)
    Traceback (most recent call last):
      File "", line 1, in 
      File "C:\Python39\lib\site-packages\pandas\core\frame.py", line 3760, in insert
        self._mgr.insert(loc, column, value, allow_duplicates=allow_duplicates)
      File "C:\Python39\lib\site-packages\pandas\core\internals\managers.py", line 1191, in insert
        raise ValueError(f"cannot insert {item}, already exists")
    ValueError: cannot insert a, already exists
    >>> df.insert(0, 'a', -2,  allow_duplicates = True)
    >>> df
       a  a  b  c
    0 -2 -1  1  3
    1 -2 -1  2  4

17voto

Nic Punkte 3335

Sie könnten versuchen, Spalten als Liste zu extrahieren, sie nach Belieben zu bearbeiten und Ihr DataFrame neu zu indizieren:

>>> cols = df.columns.tolist()
>>> cols = [cols[-1]]+cols[:-1] # oder andere Änderungen, die Sie benötigen
>>> df.reindex(columns=cols)

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

BEARBEITEN: Dies kann in einer Zeile erledigt werden; jedoch sieht dies ein wenig hässlich aus. Vielleicht kommt ja ein sauberer Vorschlag...

>>> df.reindex(columns=['n']+df.columns[:-1].tolist())

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

4voto

Ka Wa Yip Punkte 2556
Eine allgemeine 4-Zeilen-Routine

Sie können die folgende 4-Zeilen-Routine verwenden, wenn Sie eine neue Spalte erstellen und an eine bestimmte Stelle loc einfügen möchten.

df['neue_spalte'] = ... # Definition der neuen Spalte
col = df.columns.tolist()
col.insert(loc, col.pop()) #loc ist der Index der Spalte, in die Sie einfügen möchten
df = df[col]

In Ihrem Beispiel ist es einfach:

df['n'] = 0
col = df.columns.tolist()
col.insert(0, col.pop()) 
df = df[col]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X