【问题标题】:How to remove column and row labels from data frame?如何从数据框中删除列和行标签?
【发布时间】:2017-09-24 05:10:54
【问题描述】:

我有一个数据框

                          Dim 1       Dim 2
Low Acceleration    0.615631233 0.000141725
Medium Acceleration 0.531160937 0.288548459
High Acceleration   0.001130792 0.751136141

我想同时删除列标签和行标签,我该如何实现呢?我尝试使用 rownames(abc) <- c()abc <- abc[,-1],其中 abc 是我的数据框。

我需要这样的东西

  0.615631233  0.000141725
  0.531160937  0.288548459
  0.001130792  0.751136141

【问题讨论】:

标签: r matrix dataframe


【解决方案1】:

你的想法是对的。 rownames(abc) <- c() colnames(abc)<- c() 可以工作

df<- data.frame(col=c(1.34,3.45,2,56), row.names = c("a","b","c","d"))
df
    col
a  1.34
b  3.45
c  2.00
d 56.00

rownames(df)<- c()
colnames(df)<- c()
df

1  1.34
2  3.45
3  2.00
4 56.00

【讨论】:

  • 可能转换为矩阵会更好。不建议使用没有列名或具有重复列名的 data.frames。此外,删除行名的规范方法是row.names(df) &lt;- NULL
【解决方案2】:

正如@imo 所指出的,如果您要按索引引用列和行,最好将您的dataframe 转换为矩阵,尤其是当它都是数字时。你可以这样做:

mat = as.matrix(df)
dimnames(mat) = NULL

结果:

> mat
            [,1]        [,2]
[1,] 0.615631233 0.000141725
[2,] 0.531160937 0.288548459
[3,] 0.001130792 0.751136141

数据:

df = read.table(text = "rownames Dim1 Dim2
                LowAcceleration 0.615631233 0.000141725
                MediumAcceleration 0.531160937 0.288548459
                HighAcceleration 0.001130792 0.751136141", header = TRUE, row.names = 1)

【讨论】:

    【解决方案3】:

    如果您追求更高效的数值结构(即 Numpy 数组),请使用 pd.as_matrix(),它将返回一个 Numpy 数组数组:

    In [1]: import pandas as pd; import numpy as np
    
    In [2]: df = pd.DataFrame(np.random.randn(4,2),columns=['A','B'],index=['p','q','r','s'])
    
    In [3]: print(df)
              A         B
    p -1.284468 -0.264533
    q -0.347832  0.026523
    r -0.349578  0.681883
    s  0.004477 -0.738606
    
    In [4]: df.as_matrix()
    Out[4]:
    array([[-1.28446781, -0.26453299],
           [-0.34783207,  0.02652279],
           [-0.34957842,  0.68188282],
           [ 0.00447653, -0.73860575]])
    
    In [5]: print(type(df.as_matrix()))
    <class 'numpy.ndarray'>
    

    【讨论】:

    • ::facepalm:: 没关系,你的问题是关于 R,而不是 Pandas。
    【解决方案4】:

    一个简单的方法是使用unname()as.matrix(),即,

    mat <- unname(as.matrix(df))
    

    这样

    > mat
                [,1]        [,2]
    [1,] 0.615631233 0.000141725
    [2,] 0.531160937 0.288548459
    [3,] 0.001130792 0.751136141
    

    【讨论】:

      猜你喜欢
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2013-01-17
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多