在Pandas 資料操作中,有效地向DataFrame 添加多個新列可能是一項需要優雅解決方案的任務。雖然使用帶有等號的列列表語法的直覺方法可能看起來很簡單,但它可能會導致意外的結果。
如提供的範例所示,以下語法無法如預期建立新欄位:
df[['column_new_1', 'column_new_2', 'column_new_3']] = [np.nan, 'dogs', 3]
這是因為在使用列列表語法時,Pandas 要求賦值的右邊是DataFrame。標量值或列表與此方法不相容。
幾種替代方法提供了同時添加多個列的可行解決方案:
方法1:單獨分配使用迭代器解包
df['column_new_1'], df['column_new_2'], df['column_new_3'] = np.nan, 'dogs', 3
方法2:擴充單行以符合索引
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs' , 3]], index=df.index)方法3:使用pd.concat 與臨時DataFrame 合併
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, '狗', 3]],
索引=df.索引,
列=['column_new_1'、'column_new_2'、'column_new_3']
)
],軸=1
)方法4:使用.join
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
df = df.join(pd.DataFrame(
[[np.nan, '狗', 3]],
索引=df.索引,
列=['column_new_1'、'column_new_2'、'column_new_3']
))方法五:使用字典作為臨時DataFrame
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
df = df.join(pd.DataFrame(
{
'column_new_1':np.nan,
'column_new_2': '狗',
'column_new_3':3
}, 索引=df.index
))方法6:使用.assign() 與多個列參數
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
df = df.assign(column_new_1=np.nan, column_new_2= ' dogs', column_new_3=3)方法7:建立列,然後賦值
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
new_col&]方法7:建立列,然後賦值new_cols = ['column_new_1', 'column_new&&&]new_cols = ['column_new_1', 'column_new_2', 'column_new_2', 'column_new_2', 'column_new_2', 'column_new_2', 'column_new_2', 'column_new_2' '] new_vals = [np.nan, '狗', 3] df = df.reindex(columns=df.columns.tolist() new_cols) # 新增空列 df[new_cols] = new_vals # 多列賦值適用於現有的cols
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
方法8:多個順序賦值df['column_new_1'] = np .nan df['column_new_2'] = '狗' df['column_new_3'] = 3
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3