繁体   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