首页 > 解决方案 > Pandas df 重新排序列似乎在循环中工作,但不是。我到底错过了什么?

问题描述

所以我完全困惑为什么会这样:

我有 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]
.
.
```

标签: pythonpandasloopsdataframe

解决方案


当您分配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 列。


推荐阅读