Wenn Sie irgendwo im Pandas DataFrame eine Spalte hinzufügen möchten, verwenden Sie pandas.DataFrame.insert. Es kann erreicht werden, indem es verwendet wird, aber es gibt einige Beschwerden.
Ich habe eine praktische Funktion geschrieben, um diese Probleme zu lösen.
from typing import Union, Optional
import pandas as pd
def insert_columns(
df: pd.DataFrame,
data: Union[pd.Series, pd.DataFrame],
*,
before: Optional[str] = None,
after: Optional[str] = None,
allow_duplicates: bool = False,
inplace: bool = False,
) -> pd.DataFrame:
if not inplace:
df = df.copy()
if not (after is None) ^ (before is None):
raise ValueError('Specify only "before" or "after"')
if before:
loc = df.columns.get_loc(before)
else:
loc = df.columns.get_loc(after) + 1
if type(data) is pd.Series:
df.insert(loc, data.name, data, allow_duplicates)
elif type(data) is pd.DataFrame:
for column in data.columns[::-1]:
df.insert(loc, column, data[column], allow_duplicates)
return df
Verwenden Sie den Iris-Datensatz von sklearn als Beispieldaten.
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
target = pd.Series(iris.target_names[iris.target], name='target')
df.head()
target.head()
Versuchen Sie, das Ziel nach "Kelchblattbreite (cm)" in df hinzuzufügen.
insert_columns(df, target, after='sepal width (cm)')
In diesem Beispiel wird Series hinzugefügt, es kann jedoch auch DataFrame angegeben werden.
Recommended Posts