请问df.iloc[:,:-1]和df.iloc[:,-1]有什么区别?如果可以的话能举个实例吗?
df.iloc[:,:-1]表示选取所有行和除最后一列外的所有列,
df.iloc[:,-1]表示选取所有行和最后一列。
df.iloc[:,:-1] 和 df.iloc[:,-1] 都是使用 iloc 来根据整数位置选择数据。iloc 是基于整数索引的,它接受两个参数,分别代表行坐标和列坐标。
df.iloc[:,:-1] 选择除最后一列之外的所有行和所有列。第一个参数 : 表示选择所有行,第二个参数 :-1 表示选择除最后一列之外的所有列。
df.iloc[:,-1] 选择最后一列的所有行。第一个参数 : 表示选择所有行,第二个参数 -1 表示选择最后一列。
因此,这两个表达式的区别在于它们选择的列不同。一个选择除最后一列之外的所有列,而另一个仅选择最后一列。
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
print(df)
print(df.iloc[:,:-1])
print(df.iloc[:,-1])
#0 7
#1 8
#2 9
print('iloc[row,col]通过行列坐标来取数据:')
print('取出第0行:')
print(df.iloc[0])
# 也可以用print(df.iloc[0,:])
Out:
iloc[row,col]通过行列坐标来取数据:
取出第0行:
A green
B M
C 10.1
D class1
Name: 0, dtype: object
print('取出第1列(注意:iloc左开右闭):')
print(df.iloc[:, 1:2])
Out:
取出第1列(注意:iloc左开右闭):
B
0 M
1 L
2 XL
print('取出第1行和第二行的后两列:')
# cols = df.shape[1] # shape[0]表行数,shape[1]表示列数
print(df.iloc[1:3, cols - 2:cols])
Out:
取出第1行和第二行的后两列:
C D
1 13.5 class2
2 15.3 class1
df.iloc[:,:-1]表示选取DataFrame中除最后一列以外的所有列,而df.iloc[:,-1]表示选取DataFrame最后一列的所有行。具体地,df.iloc[:,:-1]的意思是选取df的每一行的所有列,除了最后一列;而df.iloc[:,-1]的意思是选取df的每一行的最后一列。以下是一个简单的实例,以更好地理解它们的用法:
import pandas as pd
import numpy as np
# 构造一个包含3列数据的DataFrame
df = pd.DataFrame(np.random.rand(5,3), columns=['A', 'B', 'C'])
# 选取除最后一列以外的所有列
df_new1 = df.iloc[:,:-1]
print(df_new1)
# 选取最后一列的所有行
df_new2 = df.iloc[:,-1]
print(df_new2)
以上代码中,首先用np.random.rand()生成一个包含5行3列数据的DataFrame,然后用df.iloc[:,:-1]选取除最后一列以外的所有列,用df.iloc[:,-1]选取最后一列的所有行,最后分别打印输出它们的结果。运行代码可以得到以下输出结果:
A B
0 0.501277 0.016118
1 0.859429 0.951998
2 0.750899 0.815003
3 0.968870 0.073981
4 0.888211 0.488596
0 0.606721
1 0.990132
2 0.548773
3 0.125109
4 0.074763
Name: C, dtype: float64
因此,以上代码中df_new1表示选取了df的除最后一列以外的所有列,即'A'和'B'两列,df_new2表示选取了df的最后一列的所有行,即'C'列的所有行。