一个关于Python的问题

请问df.iloc[:,:-1]和df.iloc[:,-1]有什么区别?如果可以的话能举个实例吗?

df.iloc[:,:-1]表示选取所有行和除最后一列外的所有列,
df.iloc[:,-1]表示选取所有行和最后一列。

img

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)

A B C

0 1 4 7

1 2 5 8

2 3 6 9

print(df.iloc[:,:-1])

A B

0 1 4

1 2 5

2 3 6

print(df.iloc[:,-1])
#0 7
#1 8
#2 9

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
  • 这篇博客: python df.iloc[]和df.loc[]使用中的 对iloc函数使用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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
    
  • 以下回答由chatgpt基于相关博客总结生成:

    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'列的所有行。