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

熊猫索引和键错误

  •  0
  • Yash  · 技术社区  · 6 年前

    考虑以下内容:

    d = {'a': 0.0, 'b': 1.0, 'c': 2.0}
    
    e = pd.Series(d, index = ['a', 'b', 'c'])
    
    df = pd.DataFrame({ 'A' : 1.,'B' : e,'C' :pd.Timestamp('20130102')}).
    

    当我尝试以以下方式访问B列的第一行时:

    >>> df.B[0]
    0.0
    

    我得到了正确的结果。

    不过,看完后 KeyError: 0 when accessing value in pandas series ,我假设,由于我已经将索引指定为“a”、“b”和“c”,访问B列第一行(使用位置参数)的正确方法是: df.B.iloc[0] df.B[0] 应引发一个键错误。我不知道我错过了什么。有人能澄清在哪种情况下我会得到一个关键错误吗?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Justinas Marozas    6 年前

    df.B[0] df.B.loc[0] df.B.iloc[0] loc iloc

    d = [0.0, 1.0, 2.0]
    e = pd.Series(d, index = ['a', 'b', 'c'])
    df = pd.DataFrame({'A': 1., 'B': e, 'C': pd.Timestamp('20130102')})
    
    df.B[0] # 0.0 - fall back to position based
    df.B['0'] # KeyError - no label '0' in index
    df.B['a'] # 0.0 - found label 'a' in index
    df.B.loc[0] # TypeError - string index queried by integer value
    df.B.loc['0'] # KeyError - no label '0' in index
    df.B.loc['a'] # 0.0 - found label 'a' in index
    df.B.iloc[0] # 0.0 - position based query for row 0
    df.B.iloc['0'] # TypeError - string can't be used for position
    df.B.iloc['a'] # TypeError - string can't be used for position
    

    d = [0.0, 1.0, 2.0]
    e = pd.Series(d, index = [4, 5, 6])
    df = pd.DataFrame({'A': 1., 'B': e, 'C': pd.Timestamp('20130102')})
    
    df.B[0] # KeyError - label 0 not in index
    df.B['0'] # KeyError - label '0' not in index
    df.B.loc[0] # KeyError - label 0 not in index
    df.B.loc['0'] # KeyError - label '0' not in index
    df.B.iloc[0] # 0.0 - position based query for row 0
    df.B.iloc['0'] # TypeError - string can't be used for position
    
        2
  •  0
  •   xyzjayne    6 年前

    df.B

    df[['B']][0]
    
        3
  •  0
  •   NiGiord    6 年前

    df.B pandas.Series df['B'] df.B[0]

    data structure documentation