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