我使用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