【问题标题】:Pandas Dataframe select multiple discontinuous columns/slicesPandas Dataframe 选择多个不连续的列/切片
【发布时间】:2018-10-13 02:01:40
【问题描述】:

我有 >100 列的数据框。我正在尝试选择 0~32 和 #83 列。似乎 1 片适用于下面的代码。

df_new = df[df.columns[0:32]]

但它不适用于下面的 2 片代码。我该如何解决这个问题?

df_new = df[df.columns[0:32, 83]]

【问题讨论】:

    标签: python pandas slice


    【解决方案1】:

    np.r_ 索引器与iloc 结合使用,如下所示:

    df.iloc[:, np.r_[0:32, 83]]
    

    np.r_[0:32, 83]
    
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 83])
    

    【讨论】:

    • 不幸的是,这样的第一个/最后一个不起作用,df.iloc[:, np.r_[0, -3:]]。如果有人有使用np.r_ 的解决方案,那将是对这个答案的一个很好的补充。
    • @DavidParks 我很惊讶这并没有得到更好的支持,但你去吧:c = df.shape[1]; df.iloc[:, np.r_[0, nc-3:nc]]
    【解决方案2】:

    np.r_ 是一个很好的答案。另一种方法是使用列表和范围来构造它。

    考虑这个例子:

    import pandas as pd
    
    df = pd.DataFrame([range(10)],range(10))
    cols = list(range(0,5))+[8]              # 0,1,2,3,4,8
    df.iloc[:,cols]
    

    【讨论】:

      【解决方案3】:

      我也对这个问题感兴趣。我们可以选择几个单独的行或列。但似乎切片操作只能在每个轴上进行一次。像下面这样。

      new_df=df.iloc[[2,3,4],[3:4]]
      

      也许我们可以先切片,然后将它们连接在一起。

      df1=df.iloc[[2:4],:]
      df2=df.iloc[[8:10],:]
      new_df=pd.concat([df1,df2],axis=0)
      

      【讨论】:

      • 这是对行进行切片,但 op 需要列
      • 我绝对考虑过选择 2 个切片并连接,但认为必须有一个更简单的方法,如第一个答案所示。
      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 2017-08-11
      • 2017-05-06
      • 2018-10-07
      • 2017-03-28
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多