如何使用 Pandas 获取特定行?

How to use Pandas to fetch specific rows?

我知道pandas可以从头部或尾部获取数据:

data = data.head(100)

data = data.tail(100)

如果我想获取第 20 行到第 30 行的数据怎么办:

任意函数,例如:

data =data.(from row 20th to row 30th)

有朋友帮忙吗?

试试这个:

data=data.iloc[20:31,:]

您可以像普通列表一样切片(并且您必须使用 31 获取行 30

 df[20:31]

或使用iloc (integer-location)

 df.iloc[20:31]

两者都使用行号而不是索引。

使用 iloc 您还可以 select 使用数字的列(第一列有数字 0

 df.iloc[20:31, 0]

 df.iloc[20:31, 0:1]

您也可以使用行列表 - 即。只得到第 20 和第 30 行。

 df.iloc[ [20,30] ]

与列相同

 df.iloc[ [20,30], [0,2] ]

您可以将列表与切片混合使用

 df.iloc[ 20:31, [0,2] ]

 df.iloc[ [20,30], 0:2 ]

在切片中你可以使用 start:end:step

 df.iloc[ 20:31:2 ]

: 在您想要 select 仅列

时获取所有行
 df.iloc[ : , [0,2] ]

start::end

 df.iloc[ 20: ]

 df.iloc[ :30 ]

负值从末尾开始计算

 df.iloc[ -2: ]

您也可以使用slice()

 df.iloc[ slice(20,31) ]

 s = slice(20,31)
 df.iloc[ s ]

 s = slice(20,31,2)
 df.iloc[ s ]

顺便说一句:如果你更喜欢索引而不是行号,你可以使用 loc

 df.loc[120:130]

 df.loc[ 120:130, ['A', 'C'] ]

文档:iloc, loc. More: User Guide - indexing and selecting data


示例代码。我专门创建索引 100:140 所以它们与行号

不同
import pandas as pd

df = pd.DataFrame({'A': range(40), 'B': range(10,50), 'C': range(-50, -10)}, index=range(100,140))

print('\n--- all ---\n')
print(df)

print('\n--- rows from 20 to 30 (all columns) ---\n')
print(df[20:31])

print('\n--- rows from 20 to 30 (all columns) ---\n')
print(df.iloc[20:31])

print('\n--- rows from 20 to 30 and column 0 ---\n')
print(df.iloc[20:31, 0])

print('\n--- rows 20,30 (all columns) ---\n')
print(df.iloc[[20,31]])

print('\n--- rows 20,30 and columns 0,2 ---\n')
print(df.iloc[[20,31], [0,2]])

print('\n--- rows from 20 to 30 and columns 0,2 ---\n')
print(df.iloc[ 20:31, [0,2]])

print('\n--- indexes 120 to 130 (all columns) ---\n')
print(df.loc[120:130])

print('\n--- indexes 120 to 130 and columns A,C ---\n')
print(df.loc[120:130, ['A','C']])