【问题标题】:How to select (slice) in Pandas multiple rows and multiple non continuous columns?如何在 Pandas 中选择(切片)多行和多个非连续列?
【发布时间】:2019-05-31 17:13:16
【问题描述】:

我有一个数据框,我想要一个特定行的范围,同时需要一个由连续范围的列加上一个额外的列组成的范围。包括一段产生这样一个数据帧的代码

import pandas as pd 
import numpy as np
np.random.seed(5)
dF = pd.DataFrame(np.random.randint(100, size=(100, 6)), 
              columns=list('ABCDEF'), 
              index=['R{}'.format(i) for i in range(100)])
dF.head()

这很好用:

dF.loc[:, 'C':'E']

但我需要这样的东西,它会产生错误:

dF.loc['R95':, ['A':'C', 'F']]

预期结果必须包括“R95”行及“A”、“C”和“F”列

【问题讨论】:

  • dF.loc['R95':, ['C','D', 'F']] 考虑到“预期结果必须包括从行 'R95' 和列 'C'、'D' 和 'F'”
  • @anky_91 我想在解决方案中使用“:”进行选择。
  • 我不认为你可以在索引中结合切片和逗号。不支持。阅读here

标签: python pandas multiple-columns slice


【解决方案1】:

如果你可以只使用你可以做的索引:

dF.iloc[95:, np.r_[0:3, -1]]

    A   B   C   F
R95 19  7   76  0
R96 57  31  86  64
R97 51  12  59  33
R98 24  7   68  69
R99 81  20  86  70

这样干净多了。

【讨论】:

    【解决方案2】:

    pandas indexing 允许使用以下方法来索引数据框(引用自文档):

    • 单个标签,例如5 或 'a'(请注意,5 被解释为索引的标签。此用法不是沿索引的整数位置。)。
    • 标签列表或数组 ['a', 'b', 'c']。
    • 带有标签 'a':'f' 的切片对象(请注意,与通常的 python 切片相反,索引中包含开始和结束点!请参阅带标签的切片。)。
    • 布尔数组
    • 具有一个参数(调用 Series、DataFrame 或 Panel)的可调用函数并返回有效的索引输出(上述之一)。

    所以你需要使用一些更复杂的东西。

    例如,您可以使用pandas.concat 分别选择列,然后将数据框连接在一起:

    pd.concat([dF.loc['R95':, 'A':'C'], dF.loc['R95':,'F']], axis=1)
    

    这给出了:

          A   B   C   F
    R95  19   7  76   0
    R96  57  31  86  64
    R97  51  12  59  33
    R98  24   7  68  69
    R99  81  20  86  70
    

    【讨论】:

      【解决方案3】:

      这是一个丑陋的解决方案,但它仍然有一个冒号

      df.loc['R95':, df.loc[:,'A':'C'].columns.tolist()+['F']]
      

      【讨论】:

        猜你喜欢
        • 2018-10-13
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 2020-02-20
        • 2018-10-07
        • 1970-01-01
        相关资源
        最近更新 更多