簡體   English   中英

Pandas df 重新排序列似乎在循環中工作,但沒有。 我到底錯過了什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM