pandas.DataFrame 索引
df.loc / df:选择行与列
df:选择列
默认一般用于选择列,但也可以选择行
import numpy
import pandas
df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4),
index = ["one","two","three"],columns = list("abcd"))
print(df)
# 按照列名选择列,只选择一列则输出Series,选择多列输出DataFrame
data1 = df["a"] # 输出Series
data2 = df[["b","c"]] # 输出DataFrame
print(data1)
print(data2)
df[]
中为数字时,默认选择行
只能进行切片的选择(df[:1]
),不能单独选择(df[0]
)
data5 = df[:1]
print(data5) # 输出结果为Dataframe,即便只选择一行
# df[]不能通过索引标签名来选择行(df['one'])
df.loc:选择行
按照index
默认选择行,需要使用.loc
import numpy
import pandas
df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4),
index = ["one","two","three"],columns = list("abcd"))
print(df)
# 只选择一行则输出Series,选择多行输出DataFrame
# 单标签索引
data3 = df.loc["one"] # 输出Series
# 多标签索引,如果标签不存在,则返回NaN
data4 = df.loc[["one","two"]] # 输出DataFrame
# 切片索引,末端包含
data6 = df.loc["one":"three"]
print(data3)
print(data4)
print(data6)
df.iloc:按整数位置选择行
df.iloc
:按照整数位置(从轴的0到length-1)
选择行
类似列表的索引,其顺序就是dataframe的整数位置,从0开始计算
import numpy
import pandas
df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4),
index = ["one","two","three"],columns = list("abcd"))
print(df)
# 单位置索引
# 和loc索引不同,索引不能超出数据行数的整数位置
print(df.iloc[0])
# 多位置索引
print(df.iloc[2,3])
# 切片索引
# 末端不包含
print(df.iloc[1:3])
布尔型索引
import numpy
import pandas
df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4) * 100,
index = ["one","two","three"],columns = list("abcd"))
# True返回原数据,False返回NaN
print(df[df < 20])
# 单列做判断
# 保留单列判断为True的行数据,包括其他列
print(df[df["a"] > 20])
# 多列做判断
# True返回原数据,False返回NaN
print(df[df[["a","b"]] > 50])
# 多行做判断
# True返回原数据,False返回NaN
print(df[df.loc[["one","three"]] < 50])
多重索引
同时索引行和列
先选择列再选择行,相当于对于一个数据,先筛选字段,再选择数据量
import numpy
import pandas
df = pandas.DataFrame(numpy.random.rand(12).reshape(3,4) * 100,
index = ["one","two","three"],columns = list("abcd"))
print(df["a"].loc[["one","three"]]) # 选择a列的one,three行
print(df[['b','c','d']].iloc[::2]) # 选择b,c,d列的one,three行
print(df[df['a'] < 50].iloc[:2]) # 选择满足判断索引的前两行数据