如何按位置切分熊猫数据帧?

我有一个熊猫数据框架对象,它有1000行和10列。我只想对数据框架进行切片,取前10行。我怎么能这么做?我一直想用这个:

>>> df.shape
(1000,10)
>>> my_slice = df.ix[10,:]
>>> my_slice.shape
(10,)

我的那一块不应该放在前十排吗。一个10x10的数据帧?如何获得前十行,使得 my_slice是一个10x10的数据帧对象?谢谢。

173297 次浏览

df.ix[10,:]给出第10行中的所有列。在您的情况下,您希望所有的第10行是 df.ix[:9,:]。请注意,片范围的右端包含: http://pandas.sourceforge.net/gotchas.html#endpoints-are-inclusive

为了方便起见,你也可以这样做:

df[:10]

DataFrame[:n]将返回前 n 行。

有多种方法可以做到这一点。下面我们将通过至少三个选项。

为了保持原始数据帧 df,我们将分片数据帧分配给 df_new

最后,在 时间比较部分,我们将使用一个随机数据框架展示各种执行时间。


选择一

df_new = df[:10] # Option 1.1


# or


df_new = df[0:10] # Option 1.2

选择二

使用 head

df_new = df.head(10)

对于 n 的负值,该函数返回除最后 n 行之外的所有行,等效于 df[:-n][来源]


选择三

使用 iloc

df_new = df.iloc[:10] # Option 3.1


# or


df_new = df.iloc[0:10] # Option 3.2

时间比较

对于这个特定的情况,人们已经使用 time.perf_counter()来度量执行的时间。

       method                   time
0  Option 1.1 0.00000120000913739204
1  Option 1.2 0.00000149995321407914
2    Option 2 0.00000170001294463873
3  Option 3.1 0.00000120000913739204
4  Option 3.2 0.00000350002665072680

enter image description here

由于存在各种可能影响执行时间的变量,这可能会根据所使用的数据框架等情况而改变。


备注:

  • 可以使用所需的行数替换以前的操作,而不是使用 10

    df_new = df[:5]
    

    将返回具有第一个 5行的数据帧。

  • 还有其他方法来度量执行时间。如果想了解更多的方法,请阅读以下内容: 如何获得 Python 程序的执行时间?

  • 还可以将前面的选项调整为 lambda 函数,如下所示

    df_new = df.apply(lambda x: x[:10])
    
    
    # or
    
    
    df_new = df.apply(lambda x: x.head(10))
    

    然而,请注意,这里有 对.application ()的用法有强烈的意见,在这种情况下,它远不是必需的方法。