无法理解DataFrame方法"loc"逻辑,如果我们使用不正确的标签名称



我使用loc方法提取列,并使用标签。我在使用错误的标签名称时遇到问题,导致如下输出。PL请帮助我理解标签使用方面loc方法背后的逻辑。


import pandas as pd
Dic={'empno':(101,102,103,104),'name':('a','b','c','d'),'salary':(3000,5000,8000,9000)}
df=pd.DataFrame(Dic)


print(df)
print()
print(df.loc[0:2,'empsfgsdzfsdfsdaf':'salary'])
print(df.loc[0:2,'empno':'salarysadfsa'])
print(df.loc[0:2,'name':'asdfsdafsdaf'])
print(df.loc[0:2,'sadfsadfsadf':'sasdfsdflasdfsdfsdry'])
print(df.loc[0:2,'':'nasdfsd'])

输出:

empno name  salary
0    101    a    3000
1    102    b    5000
2    103    c    8000
3    104    d    9000

name  salary
0    a    3000
1    b    5000
2    c    8000
empno name  salary
0    101    a    3000
1    102    b    5000
2    103    c    8000
Empty DataFrame
Columns: []
Index: [0, 1, 2]
salary
0    3000
1    5000
2    8000
empno name
0    101    a
1    102    b
2    103    c

.loc[A : B, C : D]将选择:

  • 从(包括(A到(包括(B的索引(行(标签;以及
  • 从(包括(C到(包括(D的列标签

让我们看看列标签切片'a' : 'salary'。由于a在第一列标签之前,我们得到empno、name、salary。

print(df.loc[0:2, 'a':'salary'])
empno name  salary
0    101    a    3000
1    102    b    5000
2    103    c    8000

它在切片的上端以相同的方式工作:

print(df.loc[0:2, 'name':'z'])
name  salary
0    a    3000
1    b    5000
2    c    8000

下面是一个列表理解,显示了第二个切片是如何工作的:

# code
[col for col in df.columns if 'name' <= col <= 'z']
# result
['name', 'salary']

这里对所有最常用的子集设置方法都有一个很好的描述:

https://www.kdnuggets.com/2019/06/select-rows-columns-pandas.html

相关内容

最新更新