1282 Stimmen

Wie füge ich eine neue Spalte zu einem vorhandenen DataFrame hinzu?

Ich habe das folgende indizierte DataFrame mit benannten Spalten und Zeilen, die nicht kontinuierliche Zahlen sind:

          a         b         c         d
2  0.671399  0.101208 -0.181532  0.241273
3  0.446172 -0.243316  0.051767  1.577318
5  0.614758  0.075793 -0.451460 -0.012493

Ich möchte eine neue Spalte, 'e', zum vorhandenen DataFrame hinzufügen und nichts im DataFrame ändern (d. h. die neue Spalte hat immer die gleiche Länge wie das DataFrame).

0   -0.335485
1   -1.166658
2   -0.385571
dtype: float64

Wie kann ich die Spalte e dem obigen Beispiel hinzufügen?

11voto

WillZ Punkte 3665

Eines ist zu beachten: Wenn Sie dies tun

df1['e'] = Series(np.random.randn(sLength), index=df1.index)

handelt es sich effektiv um einen linken Join an df1.index. Wenn Sie also einen äußeren Join-Effekt erzielen möchten, ist meine wahrscheinlich unvollkommene Lösung, ein DataFrame mit Indexwerten zu erstellen, die das Universum Ihrer Daten abdecken, und dann den obigen Code zu verwenden. Zum Beispiel,

data = pd.DataFrame(index=all_possible_values)
df1['e'] = Series(np.random.randn(sLength), index=df1.index)

8voto

kkumer Punkte 331

Lassen Sie mich nur hinzufügen, dass, genauso wie für hum3, .loc das SettingWithCopyWarning nicht löste und ich auf df.insert() zurückgreifen musste. In meinem Fall wurde ein falsch positives Ergebnis durch "fakes" Kettenindizierung dict['a']['e'] generiert, wobei 'e' die neue Spalte ist und dict['a'] ein DataFrame aus einem Dictionary ist.

Beachten Sie auch, dass Sie, wenn Sie wissen, was Sie tun, die Warnung ausschalten können mit pd.options.mode.chained_assignment = None und dann eine der anderen hier gegebenen Lösungen verwenden können.

7voto

Dima Lituiev Punkte 11772

Bevor Sie eine neue Spalte zuweisen, müssen Sie den Index sortieren, wenn Sie indizierte Daten haben. Zumindest musste ich in meinem Fall:

data.set_index(['index_column'], inplace=True)
"wenn der Index nicht sortiert ist, wird das Zuweisen einer neuen Spalte fehlschlagen"        
data.sort_index(inplace = True)
data.loc['index_value1', 'column_y'] = np.random.randn(data.loc['index_value1', 'column_x'].shape[0])

6voto

ryanjdillon Punkte 15461

Ich war auf der Suche nach einer allgemeinen Möglichkeit, eine Spalte von numpy.nans zu einem DataFrame hinzuzufügen, ohne die lästige SettingWithCopyWarning zu erhalten.

Aus dem Folgenden:

  • die Antworten hier
  • diese Frage zu der Übertragung einer Variablen als Schlüsselwortargument
  • diese Methode zur Erzeugung eines numpy-Arrays von NaNs inline

Ich kam zu diesem Ergebnis:

col = 'Spaltenname'
df = df.assign(**{col:numpy.full(len(df), numpy.nan)})

6voto

Chirag Punkte 1428

Um eine neue Spalte 'e' zum vorhandenen Datenrahmen hinzuzufügen

 df1.loc[:,'e'] = Series(np.random.randn(sLength))

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