Was ist der einfachste Weg, eine leere Spalte zu einem Pandas DataFrame
-Objekt hinzuzufügen? Das beste, was ich gefunden habe, ist so etwas wie
df['foo'] = df.apply(lambda _: '', axis=1)
Gibt es eine weniger abwegige Methode?
Was ist der einfachste Weg, eine leere Spalte zu einem Pandas DataFrame
-Objekt hinzuzufügen? Das beste, was ich gefunden habe, ist so etwas wie
df['foo'] = df.apply(lambda _: '', axis=1)
Gibt es eine weniger abwegige Methode?
Wenn Sie eine Liste von Spalten haben, die leer sein sollen, können Sie assign
verwenden, dann Verständnisdict, dann Dict-Entpackung.
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> nan_cols_name = ["C","D","whatever"]
>>> df.assign(**{col:np.nan for col in nan_cols_name})
A B C D whatever
0 1 2 NaN NaN NaN
1 2 3 NaN NaN NaN
2 3 4 NaN NaN NaN
Sie können auch mehrere Dict in einem Dict entpacken, das Sie entpacken möchten, wenn Sie unterschiedliche Werte für verschiedene Spalten möchten.
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
nan_cols_name = ["C","D","whatever"]
empty_string_cols_name = ["E","F","bad column with space"]
df = df.assign(**{
**{col:np.nan for col in my_empy_columns_name},
**{col:"" for col in empty_string_cols_name}
}
)
Der unten stehende Code beantwortet die Frage "Wie füge ich meiner vorhandenen Datenrahmen n leere Spalten hinzu". Um Lösungen für ähnliche Probleme an einem Ort zu behalten, füge ich es hier hinzu.
Ansatz 1 (um 64 zusätzliche Spalten mit Spaltennamen von 1-64 zu erstellen)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df ist der Datenrahmen, der bereits existiert
Ansatz 2 (um 64 zusätzliche Spalten mit Spaltennamen von 1-64 zu erstellen)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Tut mir leid, dass ich meine Antwort am Anfang nicht wirklich gut erklärt habe. Es gibt einen anderen Weg, um eine neue Spalte zu einem vorhandenen DataFrame hinzuzufügen. 1. Schritt: Erstellen Sie ein neues leeres DataFrame (mit allen Spalten in Ihrem DataFrame, plus eine oder mehrere Spalten, die Sie hinzufügen möchten) namens df_temp 2. Schritt: Kombinieren Sie df_temp mit Ihrem DataFrame.
df_temp = pd.DataFrame(columns=(df_null.columns.tolist() + ['empty']))
df = pd.concat([df_temp, df])
Es ist vielleicht die beste Lösung, aber es ist eine weitere Möglichkeit, über diese Frage nachzudenken.
Der Grund, warum ich diese Methode verwende, ist, weil ich die ganze Zeit diese Warnung bekomme:
: SettingWithCopyWarning:
Es wird versucht, einen Wert in einer Kopie eines Ausschnitts aus einem DataFrame zu setzen.
Versuchen Sie stattdessen .loc[row_indexer,col_indexer] = Wert zu verwenden
Siehe die Hinweise in der Dokumentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df["empty1"], df["empty2"] = [np.nan, ""]
Großartig, ich habe einen Weg gefunden, die Warnung zu deaktivieren
pd.options.mode.chained_assignment = None
Der Grund, warum ich nach einer solchen Lösung gesucht habe, ist einfach, Leerzeichen zwischen mehreren DFs hinzuzufügen, die spaltenweise mit der pd.concat-Funktion verbunden wurden und dann mit xlsxwriter in Excel geschrieben wurden.
df[' ']=df.apply(lambda _: '', axis=1)
df_2 = pd.concat([df,df1],axis=1) #hat aber nur einmal funktioniert.
# Hinweis: df & df1 haben dieselben Zeilen, was mein Index ist.
#
df_2[' ']=df_2.apply(lambda _: '', axis=1) #hat dieses Mal nicht funktioniert !!?
df_4 = pd.concat([df_2,df_3],axis=1)
Dann habe ich den zweiten Lambda-Aufruf durch
df_2['']='' #ersetzt, was eine leere Spalte hinzuzufügen scheint
df_4 = pd.concat([df_2,df_3],axis=1)
Die Ausgabe, auf der ich es getestet habe, wurde mit xlsxwriter nach Excel geschrieben. Jupyter-Leerzeilen sehen genauso aus wie in Excel, obwohl sie kein xlsx-Format haben. Nicht sicher, warum der zweite Lambda-Aufruf nicht funktioniert hat.
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.