建议:当用行索引的时候, 尽量用 iloc 来进行索引; 而用标签索引的时候用 loc 。.
iloc与loc可以实现相同的功能:
1)iloc获取行列值时只能用数字
2)当DataFrame的行索引为数字时,loc可以用数字获取行值,当DataFrame的行索引为字符串时,loc只能用字符串获取行值;获取列值只能用字符串
import numpy as np
import pandas as pd
data=np.arange(0,30,2) #arange(起始,结束,相差)
data1=data.reshape(5,3) #reshape转换形状
df=pd.DataFrame(data1,columns=('a','b','c')) #columns定义字段
df1=pd.DataFrame(data1,columns=('a','b','c'),index=('悟空','白马','沙僧','八戒','唐僧')) #columns定义字段
print(df)
print('\n')
print(df1)
print('\n')
"""
a b c
0 0 2 4
1 6 8 10
2 12 14 16
3 18 20 22
4 24 26 28
a b c
悟空 0 2 4
白马 6 8 10
沙僧 12 14 16
八戒 18 20 22
唐僧 24 26 28
"""
# 取单个元素的值
print(df.iloc[2,2]) # 16
print(df.loc[2,'c']) # 16
print(df1.loc['沙僧','c']) # 16
print('\n')
# 指定单行(Series)
"""
a 12
b 14
c 16
Name: 2, dtype: int32
"""
print(df.iloc[2])
print(df.loc[2])
print(df1.loc['沙僧'])
print('\n')
# 指定单行(DataFrame)
"""
a b c
2 12 14 16
"""
print(df.iloc[[2]])
print(df.loc[[2]])
print(df1.loc[['沙僧']])
print('\n')
# 指定单列
"""
0 2
1 8
2 14
3 20
4 26
Name: b, dtype: int32
"""
print(df.iloc[:,1])
print(df.loc[:,'b'])
print(df1.loc[:,'b'])
print(df['b'])
print('\n')
# 指定某几行
"""
a b c
2 12 14 16
4 24 26 28
"""
# print(df.iloc[2,4]) #报错
print(df.iloc[[2,4]])
print(df.loc[[2,4]])
print(df1.loc[['沙僧','唐僧']])
print('\n')
# 指定某几列
"""
a c
0 0 4
1 6 10
2 12 16
3 18 22
4 24 28
"""
print(df.iloc[:,[0,2]])
print(df.loc[:,['a','c']])
print(df1.loc[:,['a','c']])
print('\n')
# 指定某几行,某几列
"""
a c
2 12 16
4 24 28
"""
print(df.iloc[[2,4],[0,2]])
print(df.loc[[2,4],['a','c']])
print(df1.loc[['沙僧','唐僧'],['a','c']])
print('\n')
# 连续多行,iloc[start:end],索引[开始:结束],左闭右开
# 连续多行,loc[start:end],索引[开始:结束],左闭右闭–>与iloc不同
"""
a b c
1 6 8 10
2 12 14 16
3 18 20 22
"""
print(df.iloc[1:4])
print(df.loc[1:3])
print(df1.loc['白马':'八戒'])
print('\n')
# 连续多列,iloc[:,start:end], 索引[开始:结束], 左闭右开
# 连续多列,loc[:,start:end], 索引[开始:结束], 左闭右闭–>与iloc不同
print(df.iloc[:,0:2])
print(df.loc[:,'a':'b'])
print(df1.loc[:,'a':'b'])
print('\n')
"""
a b
0 0 2
1 6 8
2 12 14
3 18 20
4 24 26
"""
# 切片来取指定行列
print(df.iloc[2:4,1:])
print(df.loc[2:3,'b':])
print(df1.loc['沙僧':'八戒','b':])
print('\n')
"""
b c
2 14 16
3 20 22
"""