【问题标题】:Access Rows by integers and Columns by labels PandasPandas 按整数访问行,按标签访问列
【发布时间】:2018-01-01 23:19:50
【问题描述】:

我的数据是这样的:

[第一行是标题]

Name,Email,Age
Sachith,ko@gmail.com,23
Sim,sm@gmail.com,234
Yoshi,yosi@hotmail.com,2345
sarla,sarla@gmail.com,234

我想访问这样的元素,以便将行指定为整数并通过标签指定列。即对于 Sim 我想以 [1,'Name'] 等身份访问它

我的问题是我应该使用 loc 还是 ix

查看文档,我对什么是熊猫索引感到困惑?它是用来访问行或列还是两者兼而有之?当我尝试打印此数据的索引时,我得到一个 (4,) dtype=int64 数组 [0,1,2,3]。那么,列不是索引的一部分吗?

【问题讨论】:

    标签: python pandas sklearn-pandas


    【解决方案1】:

    使用lociloc,因为ixdeprecated

    print (df)
          Name             Email   Age
    0  Sachith      ko@gmail.com    23
    1      Sim      sm@gmail.com   234
    2    Yoshi  yosi@hotmail.com  2345
    3    sarla   sarla@gmail.com   234
    
    #select by label 1 and label Name    
    a = df.loc[1, 'Name']
    print (a)
    Sim
    

    但如果需要按位置选择索引(需要iloc)和按标签选择列(需要loc):

    df = df.set_index('Email')
    print (df)
                         Name   Age
    Email                          
    ko@gmail.com      Sachith    23
    sm@gmail.com          Sim   234
    yosi@hotmail.com    Yoshi  2345
    sarla@gmail.com     sarla   234
    

    通过df.index[1]获取第二个索引的标签:

    a = df.loc[df.index[1], 'Name']
    print (a)
    Sim
    

    或者通过get_loc获取标签位置:

    a = df.iloc[1, df.columns.get_loc('Name')]
    print (a)
    Sim
    

    【讨论】:

    • 但是,有人提到 loc 仅适用于基于标签的索引器。但是,这里的索引不是整数吗?如果我错了,请纠正我。
    • 感谢您的详细回复。我仍然不清楚一件事。 df.loc[1, 'Name'] 和 df.loc[df.index[1], 'Name'] 有什么区别?我不明白 df.loc[1, 'Name'] 因为 1 是一个整数,而 loc 只采用基于标签的索引。
    • 哦,我想我明白了,如果我错了,请纠正我。如果索引是连续的并且从 0 开始,那么索引的标签等于它的位置。所以, df.loc[1,'Name'] 实际上是在寻找标签为 1 的索引,它恰好在位置 1
    • 是的,完全正确。你说的对。如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。
    猜你喜欢
    • 2016-05-09
    • 2014-06-22
    • 2019-01-26
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2011-06-25
    • 2013-01-21
    相关资源
    最近更新 更多