【问题标题】:Changing column order of multiple dataframes by iterating via a for-loop通过 for 循环迭代更改多个数据帧的列顺序
【发布时间】:2019-05-16 17:19:38
【问题描述】:

我正在尝试更改包含相同列名的多个数据框的列顺序。为此,我尝试了一个 for 循环,但任何数据帧的列顺序都不会改变。

按照 col_4,col_3,col_2,col_1 的顺序有四列,我希望它们按以下顺序 col_1, col_2, col_4, col_3

我试过的代码如下。我对python比较陌生,如果我犯了一些菜鸟错误,请道歉

for df in df_1,df_2,df_3:
    df=df.reindex([col_1, col_2, col_4, col_3],axis=1)

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您可以使用dataframe["col_name_1", "col_name_2", "col_name_3"]

    这里是一个例子:

    import pandas as pd
    import numpy as np
    
    data1 = pd.DataFrame(np.random.randint(0, 10, (2, 3)),
                         columns=["A", "C", "B"])
    data2 = pd.DataFrame(np.random.randint(0, 10, (2, 3)),
                         columns=["C", "B", "A"])
    data3 = pd.DataFrame(np.random.randint(0, 10, (2, 3)),
                         columns=["B", "C", "A"])
    
    print(data1)
    #    A  C  B
    # 0  5  1  3
    # 1  8  8  9
    print(data2)
    #    C  B  A
    # 0  3  2  0
    # 1  5  4  2
    print(data3)
    #    B  C  A
    # 0  4  6  7
    # 1  4  8  4
    
    new_columns_order = ["A", "B", "C"]
    
    # Reorder data2 et data3 columns according to the data1 columns
    list_dataframe = [data1, data2, data3]
    for i, df in enumerate(list_dataframe):
        list_dataframe[i] = df[new_columns_order]
    
    print("Data1:\n", list_dataframe[0])
    #    A  B  C
    # 0  7  6  8
    # 1  3  0  7
    print("Data2:\n", list_dataframe[1])
    #    A  B  C
    # 0  1  8  9
    # 1  8  9  7
    print("Data3:\n", list_dataframe[2])
    #    A  B  C
    # 0  8  9  4
    # 1  3  4  9
    

    【讨论】:

    • 感谢您的帮助。我尝试执行代码,但 data2 和 data3 的列顺序没有改变。
    • 也试过了,但问题仍然存在。当我在没有 for 循环的情况下重新排序列时,它可以正常工作,但是在 for 循环中不会保存更改
    • 没错。在循环中,如果您只是修改当前数据框,则您正在进行修改但对象未保存。您需要保存新的数据框。一种方法是将所有数据帧保存在一个列表中(正如我所做的是编辑后的答案)并在循环中重写该列表。否则,您的修改将丢失。
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2021-09-12
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多