• 针对DataFrame的数据结构,pandas提供了三种获取子集的索引器:[].loc[].iloc[]

    二、整行整列选取:df[]

    df['列标签'],选取单个整列

    # 选取“日期”列
    df['日期']
    pandas子集选取的三种方法:[]、.loc[]、.iloc[]-LMLPHP

    df[标签列表],选取多个整列

    # 选取“最高温”,“最低温”,“风力风向”三列
    df[['最高温','最低温','风力风向']]
    pandas子集选取的三种方法:[]、.loc[]、.iloc[]-LMLPHP

    df[切片],选取整行

    # 选取行索引值1、2、3的整行。切片左闭右开
    df[1:4]
    pandas子集选取的三种方法:[]、.loc[]、.iloc[]-LMLPHP

    切片语法也支持字符串的索引标签值,如将"日期"列修改为行索引(index)

    df1 = df.set_index("日期")
    # 下面两个切片选取的行是一样的
    df1[1:4]  #按位置序号的切片,左闭右开
    df1['2021-12-02 周四':'2021-12-04 周六']  # 按行标签的切片,左闭右闭
    pandas子集选取的三种方法:[]、.loc[]、.iloc[]-LMLPHP

    df[]语法小结:

    三、行列交叉选取

    行列交叉选择,可以通过df.loc[]df.iloc[]两个索引器来实现,两者都需要输入两组参数,先行选择,后列选择。行、列选择都可以是单个标签(序号)、列表和切片。根据需求组合使用,威力强大!

    df.loc[行选择,列选择]。参数面向的是标签

    df.iloc[行位置序号,列位置序号]。参数面向的是位置序号

    df1.loc['2021-12-05 周日','空气质量指数']
    df1.iloc[4,4]
    df1.loc[['2021-12-05 周日','2021-12-07 周二'],['最高温','最低温','风力风向']]
    df1.iloc[[4,6],[0,1,3]]
    df1.loc['2021-12-01 周三':'2021-12-03 周五','天气':'空气质量指数']
    df1.iloc[:3,2:5]
    df1.loc[:,['最高温','最低温']]
    df1.iloc[:,[0,1]]

    四、按条件筛选子集

    df.[]df.loc[]df.iloc[]除了按照行列的标签和位置序号选取子集,还可以使用条件(布尔表达式)筛选子集。

    筛选最高温、最低温

    将最高温、最低温处理成数值型:

    df1.loc[:,'最高温'] = df1['最高温'].str.replace('°','').astype('float32')
    df1.loc[:,'最低温'] = df1['最低温'].str.replace('°','').astype('float32')

    获取最高温大于10度,最低温小于6度的数据

    #  df.[]的写法
    df1[(df1['最高温']>10) & (df1['最低温']<6)]
    #  df.loc[]的写法
    df1.loc[(df1['最高温']>10) & (df1['最低温']<6),:]
    # &与、|或、~非
    df1.loc[(df1['最高温']>10) & ~(df1['最低温']>=6),:]

    五、函数筛选子集

    # 匿名函数lambda表达式,获取最高温大于10度,最低温小于6度的数据
    df1.loc[lambda df : (df['最高温']>10) & (df['最低温']<6)]

    获取前9天并且空气质量指数为优

    # 自定义函数,返回值是布尔数组
    def queryData(df):
        return df.index.str.startswith('2021-12-0') & df['空气质量指数'].str.endswith('优')

    df1.loc[queryData , :]

    小结

    在pandast提供的df[]df.loc[]df.iloc[]这个三种索引器,前两个更为常用。df[]在整行或者整列获取时更为方便。整行整列选取可以看作是行列交叉选取的一个特例,故df.loc[]是更为通用的方法,它支持单个标签值、列表多选、切片区间、条件(布尔)表达式、函数调用五种方式索引子集,功能强大。

    pandas子集选取的三种方法:[]、.loc[]、.iloc[]-LMLPHP

    05-03 20:21