如何按位置切片Pandas数据框?

kcrjzv8t  于 2023-01-28  发布在  其他
关注(0)|答案(5)|浏览(167)

我有一个Pandas数据框对象,有1000行和10列。我只想切片数据框,并采取前10行。我该怎么做呢?我一直在尝试使用这个:

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

my_slice不应该是前十行吗,比如一个10 x 10的数据框?我怎样才能得到前十行,这样my_slice就是一个10x10的数据框对象?谢谢。

qacovj5a

qacovj5a1#

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html?highlight=head#pandas.DataFrame.head

df2 = df.head(10)

应该可以

b4wnujal

b4wnujal2#

您也可以这样做作为一个方便:
df[:10]

56lgkhnf

56lgkhnf3#

有很多种方法可以做到这一点。下面我们将讨论至少三种选择。
为了保留原始 Dataframe df,我们将切片 Dataframe 分配给df_new
最后,在章节时间比较中,我们将使用随机 Dataframe 显示不同的执行时间。

    • 备选案文1**
df_new = df[:10] # Option 1.1

# or

df_new = df[0:10] # Option 1.2
    • 备选案文2**

使用head

df_new = df.head(10)

对于n的负值,此函数返回除最后n行之外的所有行,等效于df[:-n]Source(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html)。

    • 备选案文3**

使用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

由于有各种各样的变量可能影响执行时间,这可能会根据所使用的 Dataframe 等因素而改变。

    • 注:**
  • 除了10之外,用户还可以用所需的行数来替换前面的操作。
df_new = df[:5]

将返回包含前5行的 Dataframe 。

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

# or

df_new = df.apply(lambda x: x.head(10))

但是,请注意,存在strong opinions on the usage of .apply(),对于本例,它远非必需的方法。

vyswwuz2

vyswwuz24#

df.ix[10,:]为您提供了从第10行开始的所有列。在您的示例中,您需要直到第10行df.ix[:9,:]为止的所有列。请注意,切片范围的右端包括第10行:http://pandas.sourceforge.net/gotchas.html#endpoints-are-inclusive

rkue9o1l

rkue9o1l5#

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

相关问题