【问题标题】:Dataframe, keep only one column数据框,只保留一列
【发布时间】:2021-06-05 02:54:11
【问题描述】:

我找不到从多列 DF 返回单列 Dataframe 的 pandas 函数。 我需要drop(['']) 的精确相反函数。

有什么想法吗?

【问题讨论】:

  • 如果你想要单列,你可以做df = df['col']
  • df = df['column'].to_frame()
  • 或 df = df[['col']]

标签: pandas dataframe


【解决方案1】:

您可以使用以下表示法返回单列数据框:

df = pd.DataFrame(data=np.random.randint(1, 100 ,(10, 5)), columns=list('ABCDE'))

df_out = df[['C']]

输出:

    C
0  65
1  48
2   1
3  41
4  85
5  55
6  45
7  10
8  44
9  11

注意:df['C'] 返回一个系列。而且,您可以使用 to_frame 方法将该系列转换为数据框。或者使用双括号 [[]]。

【讨论】:

    【解决方案2】:

    为了完整起见,我想展示我们如何使用参数drop 从多列数据帧中获取一列数据帧。另外,我使用tidyverse 宇宙(paper) 解释结果。

    使用数据框 DF 的最小示例

    library(tidyverse)
    
    DF <- data.frame(a = 1:2, b = c("e", "f"))
    str(DF)
    #> 'data.frame':    2 obs. of  2 variables:
    #>  $ a: int  1 2
    #>  $ b: chr  "e" "f"
    

    顺便提一下,在低于 4.0 的 R 版本中,b 列默认是一个因素(除非我们使用 stringsAsFactors= FALSE

    运算符[返回一个列表(数据帧),因为它保留了原始结构(数据帧)

    DF[1]
    #>   a
    #> 1 1
    #> 2 2
    
    DF['a']
    #>   a
    #> 1 1
    #> 2 2
    

    另一方面,运算符[[ 将结果简化为可能的最简单结构,即单列数据帧的向量。在它的三个表达式中,你总是得到简化版(一个向量)

    DF[[1]]
    #> [1] 1 2
    
    DF[['a']]
    #> [1] 1 2
    
    DF$a
    #> [1] 1 2
    

    最后,使用[ 与行和列维度

    DF[, 1]
    #> [1] 1 2
    

    还返回简化版本,因为参数 drop 默认设置为 TRUE。将其设置为 FALSE,您将保留结构并获得一列数据帧

    DF[, 1, drop = FALSE]
    #>   a
    #> 1 1
    #> 2 2
    

    可以在以下位置找到对这一点的一个很好的解释:Advanced R by Hadley Wickham, CRC, 2015, section 3.2.1 or section 4.2.5 in the online version of the book (June 2021)

    最后,在tidyverse 宇宙CRAN 中,您在选择一列时总是会获得一个数据框(tibble)

    DF %>% 
      select(2)
    #>   b
    #> 1 e
    #> 2 f
    
    DF %>% 
      select("a")
    #>   a
    #> 1 1
    #> 2 2
    
    DF %>% 
      select(a)
    #>   a
    #> 1 1
    #> 2 2
    

    reprex package (v0.3.0) 于 2021-06-04 创建

    【讨论】:

      【解决方案3】:

      很简单,用双括号选中即可。 它将在数据框中返回结果。您可以通过type(df)查看它

      # First create a data frame to check this
      column = df[['Risk']]
      print(column)
      print(type(column))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-26
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        相关资源
        最近更新 更多