python - 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]
.
.
```
解决方案
当您分配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 列。
推荐阅读
- ios - 如何在发布版本中获取 iOS 堆栈跟踪?
- google-cloud-speech - 'config' 中的未知名称 \"model\":找不到字段
- jpos - jpos客户端中的连接超时
- python - 如何将 Python 版本升级到 3.7?
- vb.net - 更好的性能 Linq To SQL 查询
- android - 我的 sql 删除命令使我的 db.insert 导致崩溃
- python - 如果在单元测试中跳过python中的代码
- laravel - 在中间件之间传递数据
- javascript - 从 Google Doc 到 Google Spreadsheet 复选框的交互式更改
- java - 在 Spring 安全中并发会话的情况下使第一个登录会话无效