代码之家  ›  专栏  ›  技术社区  ›  gies0r

在具有非整数索引的数据帧中设置列值时跳过前x行?

  •  0
  • gies0r  · 技术社区  · 4 年前

    DataFrame .

    1. 当我有标准整数索引时,它可以工作:
    df.loc[14:, 'avg_gain'] = 5
    

    但是当我有一个 DatetimeIndex :

    df.set_index(keys=['ts'], inplace=True)
    

    
    TypeError: cannot do slice indexing on <class 'pandas.core.indexes.datetimes.DatetimeIndex'> with these indexers [14] of <class 'int'>
    )
    

    那么怎么可能跳过第一个 x 对应用新值时的行 数据帧 哪一个索引比标准索引更具选择性?

    2 回复  |  直到 4 年前
        1
  •  2
  •   Erfan    4 年前

    使用 DataFrame.iloc 这是基于位置的索引。 DataFrame.loc 14: 如果索引是datetime:

    df.iloc[14:, df.columns.get_loc('avg_gain')] = 5
    

    或与 loc :

    df.loc[df.index[14:], 'avg_gain'] = 5
    

    注: Index.get_loc 如果列不存在,则会引发错误,因此请确保列存在。

        2
  •  0
  •   Dimitris Thomas    4 年前

    出现此错误是因为.loc[]属性主要基于标签。这意味着输入的14:将从索引14中获取的行作为字符串而不是整数。如果在包含字符串的列上设置索引,则必须相应地对其进行调整。

    import pandas as pd
    df = pd.DataFrame({'A': [1,2,3,4,5,6],
                       'B': ['a','b','c','d','e','f']})
    
        A   B
    0   1   a
    1   2   b
    2   3   c
    3   4   d
    4   5   e
    5   6   f
    

    那你可以用.loc

    df.loc[:1]
    
        A   B
    0   1   a
    1   2   b
    

    在包含字符串的列上设置索引

    df = df.set_index('B')
        A
    B   
    a   1
    b   2
    c   3
    d   4
    e   5
    f   6
    
    df.loc[:'b']
    
        A
    B   
    a   1
    b   2
    

    您还可以使用.iloc属性,该属性主要基于整数位置:

    df.iloc[:2,:]
        A
    B   
    a   1
    b   2