Pandas DataFrame的切片与索引详解
以下面的数据为例子
import pandas as pd
import numpy as np
data=pd.DataFrame({
"A":np.random.randint(5,50,5),
"B":np.random.randint(15,50,5),
"C":list(range(5)),
"D":"x"})
1 单独取行
1.1 只取某一行
data.iloc[0] # pandas series` 也可加上",:"
data.iloc[[0]] # dataframe` 也可加上",:" 即:data.iloc[[0],:]
1.2 取连续某几行
data[1:3] # dataframe 也可加上",:"
data.iloc[1:3] # dataframe 也可加上",:"
1.3 不连续的几行
data.iloc[[1,3]] # dataframe 也可加上",:"
1.4 布尔索引
data[data.C>2] # dataframe
1.5 匿名函数
data.iloc[lambda data:list(range(0,4,2))] # dataframe,隔一行取一个
# 也可加上",:"data.iloc[lambda data:list(range(0,4,2)),:]
2 单独取列
2.1 只取一列
data['A'] # 单独一列是个series
data.A # 单独一列是个series
data.loc[:,'A'] # 同上
data.iloc[:,0] # 同上,无需列名
data[['A']] #单独一列是个dataframe
data.loc[:,['A']] # 同上
data.iloc[:,[0]] # 同上,无需列名
2.2 取某几列
data[['A','C']] # 指定某几列,直接用列名,结果为dataframe,
data.loc[:,['A','C']] # 同上
data.iloc[:,[0,2]] # 同上,无需列名
2.3 取连续几列
data.loc[:,'A':'C'] #用列名
data.iloc[:,0:3] #用数字
3 既取行又取列
3.1利用df.iloc
data.iloc[[1,3],[0]] # dataframe
data.iloc[[1,3],0] # series
data.iloc[[1,3],1:3] # dataframe
data.iloc[[1,3],[1,3]] # dataframe
3.2利用df.loc
data.loc[1,["A","D"]] # series
data.loc[[1],["A","D"]] # dataframe
data.loc[[1,3],"A":"D"] # dataframe
data.loc[[1,3],["A","D"]] # dataframe`