【问题标题】:What was the main difference between df[:] and df[::] ? python3 [duplicate]df[:] 和 df[::] 之间的主要区别是什么? python3 [重复]
【发布时间】:2018-10-31 08:23:30
【问题描述】:

df[:] 和 df[::] 之间的主要区别是什么,请您给我一个关于此的示例。我无法理解。

【问题讨论】:

  • 熊猫?纯蟒蛇? requests 标签是怎么回事??
  • 几乎可以肯定 Pandas 中的多维索引
  • 纯python:没有区别
  • 目前无法测试,但 pandas 中的切片和视图(前者制作无声副本)可能存在差异

标签: python python-3.x python-2.7 jupyter-notebook


【解决方案1】:

假设您在谈论 python lists 而不是 pandas 数据帧:

考虑一个列表l:

In [301]: l = range(20,30)

In [302]: l
Out[302]: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

所以,如果你这样做:

In [303]: l[3:6]
Out[303]: [23, 24, 25]

这意味着,您想从l 中提取一个元素列表,从 index=3 到 index=6(不包括 6)。因此,它返回了23,即 l[3],24,即 l[4],25,即 l[5]。

注意:26(l[6]) 未返回,因为 6 不包含在 l[3:6] 中

所以,l[:] -- 将返回所有元素,因为没有指定范围。

In [305]: l[:]
Out[305]: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

对于扩展切片:

l[1:6:2] -- 这意味着,您希望元素从 index=1 到 index=6,步长为 2。 Step=2 表示,将每个索引增加 2

So, you should get below elements:
 l[1], 
 l[1 + 2](because the step we defined is 2), 
 l[1 + 2 + 2]( keep adding `2` to the previous index )

现在,这里之前的索引是5,我们给出的限制是6,其中不包括6。因此,我们只得到上面提到的 3 个元素。检查以下:

In [307]: l[1:6:2]
Out[307]: [21, 23, 25]

因此,l[::] 也会返回整个列表,因为我们没有在此处指定任何范围。

In [309]: l[::]
Out[309]: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

您需要练习在 python 中对字符串进行切片才能掌握它。

如果这有帮助,请告诉我。

【讨论】:

    【解决方案2】:

    没有区别。

    sequence[start:end:step]
    sequence[start:end]
    

    ':' 和 '::' 表示序列切片。如果省略 start、end 和/或 step,则使用默认值:0 是 start 的默认值,len(sequence) 是 end 的默认值,1 是 step 的默认值。

    如果,df = [1,2,3,4,5,6,7,8] 那么,

    [df[::]==df[:], df[:] == df[0: len(df): 1], df[::] == df[0: len(df): 1]]
    
    Outputs: [True, True, True]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2018-11-10
      • 2020-05-26
      • 2011-03-23
      • 2022-01-01
      • 2011-05-20
      • 2017-03-10
      相关资源
      最近更新 更多