如何使用 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']])
我知道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']])