示例数据df1:
A B C D E
0 0.299199 0.076892 1.378794 -1.607846 -0.763427
1 -0.061252 1.336151 -1.788529 -0.370140 -1.486368
2 0.665735 -0.233112 -0.485747 -1.321832 -0.083957
3 -0.319322 -0.756146 -0.997257 0.556998 -0.292198
示例数据df2:
A B C D E
a 0.299199 0.076892 1.378794 -1.607846 -0.763427
b -0.061252 1.336151 -1.788529 -0.370140 -1.486368
c 0.665735 -0.233112 -0.485747 -1.321832 -0.083957
d -0.319322 -0.756146 -0.997257 0.556998 -0.292198
示例数据df3:
A B C D E F
0 0.299199 0.076892 1.378794 -1.607846 -0.763427
1 -0.061252 1.336151 -1.788529 -0.370140 -1.486368
2 0.665735 -0.233112 130.000000 -1.321832 -0.083957
3 -0.319322 -0.756146 -0.997257 0.556998 -0.292198
备注: df1与df2唯一的区别在于它们的行索引不同
iloc与loc的共同点
1. 均可以用来访问DataFrae对象的行数据.eg:访问第3行第3列的元素
# way-1. 使用iloc:
访问df1 : df1.iloc[2]['C'] or df1.iloc[2,2]
访问df2 : df1.iloc[2]['C'] or df1.iloc[2,2]
# way-2. 使用loc:
访问df1 : df1.loc[2, 'C']
访问df2 : df2.loc['c', 'C']
iloc与loc的不同点
1. 使用iloc时,行索引始终是df对象行的序数(eg:0,1,2,...,n-1),列索引可以是df对应列的列名,也可以是列的序数(eg:0,1,2,...,n-1);
使用loc时,行列索引必须与df保持一致;因此,如果仅仅是访问数据,iloc更加灵活.
2. 当向df对象中新加入一列,其元素为空字符串时[目的是占位], 不可通过iloc来进行赋值,使用loc则可以.
# way -1. 使用iloc [无法赋值]
df3.iloc[2, 'F'] = 100
SettingWithCopyWarning : A value is trying to be set on a copy of a slice from a DataFrame
# way -2. 使用loc
df3.loc[2, 'F'] = 100
得到如下结果:
A B C D E F
0 0.299199 0.076892 1.378794 -1.607846 -0.763427
1 -0.061252 1.336151 -1.788529 -0.370140 -1.486368
2 0.665735 -0.233112 130.000000 -1.321832 -0.083957 100
3 -0.319322 -0.756146 -0.997257 0.556998 -0.292198
# 备注当向df对象加入新的列时,如果对应元素的需要在后期才能确定,应该先将其初始化为None,这样使用iloc和loc均可以在后期为新列中的元素赋值
3.在处理大批量数据时,如果需要先向df对象插入空列,在后期再填充空列中对应位置的元素,应优先考虑使用loc而不是iloc,因为前者的访问速度比后者快几十倍!!!