3 回答

TA貢獻1868條經驗 獲得超4個贊
嘗試這個
cols = TemplateColumns + df.columns.difference(TemplateColumns, sort=False).tolist()
df_final = df.reindex(cols, axis=1)
Out[714]:
First Name other number last_name
0 Cthulhu NaN 666 Smith

TA貢獻1155條經驗 獲得超0個贊
您可以編寫自己的函數來實現此目的。本質上,您可以用來.reindex()對數據框重新排序,同時包含空列(如果它們不存在)。唯一需要弄清楚的剩余部分是如何將剩余的列添加到TemplateColumns數據框中。您可以通過獲取列索引的設置差異來完成此操作,然后TemplateColumns在調用之前更新訂單.reindex
設置數據和功能
def reordered(df, new_order, include_remaining=True):
cols_to_end = []
if include_remaining:
# gets the items in `df.columns` that are NOT in `new_order`
cols_to_end = df.columns.difference(new_order, sort=False)
# Ensures that the new_order items are first
final_order = new_order + list(cols_to_end)
return df.reindex(columns=final_order)
df = pd.DataFrame({'First Name': ['Cthulhu'], 'number': [666], 'last_name': ['Smith']})
new_order = ['First Name', 'other', 'number']
和include_remaining:
out = reordered(df, new_order, include_remaining=True)
print(out)
First Name other number last_name
0 Cthulhu NaN 666 Smith
沒有include_remaining:
out = reordered(df, new_order, include_remaining=False)
print(out)
First Name other number
0 Cthulhu NaN 666

TA貢獻1829條經驗 獲得超9個贊
insert像這樣使用:
for col in TemplateColumns:
if col not in df:
df.insert(1, col, np.nan)
添加回答
舉報