【问题标题】:Iterating over dataframe and get columns as new dataframes迭代数据框并将列作为新的数据框
【发布时间】:2021-09-13 11:45:26
【问题描述】:

我正在尝试从一个大数据框创建一组数据框。这些数据框以这种方式由原始数据框的列组成: 第一个数据框是原始数据框的第一列, 第二个数据框是原始数据框的第一列和第二列, 等等。 我使用这段代码来遍历数据框:

for i, data in enumerate(x):
    data = x.iloc[:,:i]
    print(data)

这可行,但我在开始时也得到一个空数据框和一个我不需要的索引向量。 有关如何删除这 2 个的任何建议?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    而不是枚举数据帧,因为您没有使用枚举后的结果,而是仅使用索引值,您可以在range 1 中通过加一的列数进行迭代,然后取切片df.iloc[:, :i]对于i 的每个值,您可以使用list-comprehension 来实现。

    >>> [df.iloc[:, :i] for i in range(1,df.shape[1]+1)]
    [  A
    0  1
    1  2
    2  3,    
       A  B
    0  1  2
    1  2  4
    2  3  6]
    

    等效的传统循环如下所示:

    for i in range(1,df.shape[1]+1):
        print(df.iloc[:, :i])
        
       A
    0  1
    1  2
    2  3
       A  B
    0  1  2
    1  2  4
    2  3  6
    

    【讨论】:

    • 非常感谢您的帮助!不过我还有一个问题,如果我希望它一次移动 2 列而不是 1 列怎么办?我尝试将第一行更改为 +2,但它仍然一次跳 1。
    • @OmerDavidi,那么您需要将step 参数传递给range 函数,修改后的代码将如下所示:[df.iloc[:, :i] for i in range(1,df.shape[1]+1, 2)]
    【解决方案2】:

    你也可以这样做:

    data = {
        'col_1': np.random.randint(0, 10, 5),
        'col_2': np.random.randint(10, 20, 5),
        'col_3': np.random.randint(0, 10, 5),
        'col_4': np.random.randint(10, 20, 5),
    }
    df = pd.DataFrame(data)
    
    all_df = {col: df.iloc[:, :i] for i, col in enumerate(df, start=1)}
    
    # For example we can print the last one
    print(all_df['col_4'])
        col_1   col_2   col_3   col_4
    0   1   13  5   10
    1   8   16  1   18
    2   6   11  5   18
    3   3   11  1   10
    4   7   14  8   12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2016-05-22
      • 2021-01-19
      • 2017-02-13
      • 2014-11-25
      • 2021-12-26
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多