[英]Pandas df re-ordering columns seems to work within a loop, but doesn't. What the heck am I missing?
所以我完全不明白為什么會發生這種情況:
我有 8 個不同的 Pandas 數據框,具有相同的列。 我想在所有列上均等地重新排列列。 所以我創建了一個列表並嘗試了這個:
original_cols = [1, 48, 49, 50, 51, 52]
new_cols = [48, 49, 50, 51, 52, 1]
list_of_dfs = [df1, df2, df3...., df8]
for df in list_of_dfs:
df = df[new_cols]
當我查看任何數據框時,我仍然得到舊的列順序,為什么? 我插入了如下打印語句,循環執行我想要的操作:
for df in list_of_dfs:
print (df.columns.tolist())
df = df[new_cols]
print (df.columns.tolist())
Output (for df1):
[1, 48, 49, 50, 51, 52]
[48, 49, 50, 51, 52, 1]
我可以手動寫出所有內容,但認為一個簡單的循環會更好,但無法使其工作。 我一定缺少對循環或其他東西的一些基本理解。 任何幫助是極大的贊賞。
當前解決方案:
df1 = df1[new_cols]
df2 = df2[new_cols]
.
.
```
當您分配df = df[new_cols]
它不會更新列表中的 DataFrame。 嘗試這個:
size_ = len(list_of_dfs)
for idx in range(size_):
list_of_dfs[idx] = list_of_dfs[idx][new_cols]
現在 idx 將代表list_of_dfs
的索引位置,您可以只更新每個索引處的 DataFrame 列。
您指的是DataFrame
對象的副本。 如果您需要在全局范圍內交換變量名(不推薦),您可以使用globals
來引用對象本身。
import re
for df in [name for name in globals() if re.findall('df\d+', name)]:
globals()[df] = globals()[df][new_cols]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.