数据框(DataFrame)的数据选择分为按列访问、按行访问和切片。按列访问有两种语法:对象名['列标签'] 把列标签当字符串处理,必须加引号,可处理任意字符的列标签;对象名.列标签 通过数据框的属性访问列,不加引号,但对列标签要求较严——不能有空格、特殊字符,且不能与已有方法或属性重名。例如 df['平安科技']、df.南方通信 都得到一列序列。访问一列后再取其中一个元素,按访问序列的方法:对象名['列标签']['行标签'],注意列标签在前、行标签在后,如 df["平安科技"]['2024-02'] 得到 47.1。数据框按列访问不支持切片,但支持用列标签列表选取多列,语法为 对象名[['列标签',…]],如 df[['平安科技', '幸福银行']]。
按行访问必须使用选择器 loc 和 iloc(见表4-1):loc 通过标签访问,iloc 通过整数索引访问。例如 df.loc['2024-01'] 取出该月整行,df.iloc[1] 取出第 2 行(对应 2024-02)。访问一行后再取其中一个元素:对象名.loc['行标签']['列标签'](行标签在前、列标签在后),如 df.loc['2024-01']['平安科技'] 得到 45.2;整数位置则用 对象名.iloc[行索引, 列索引],如 df.iloc[1, 2] 得到 4.6。
切片时,df.loc['2024-01':'2024-02'] 按行标签切片且包含结束标签;df.iloc[0:2] 按整数位置切片,不含结束位置。行、列可同时切片:df.iloc[0:2,0:2] 切前 2 行和前 2 列交叉处的数据块;仅按列切片用 df.iloc[:,0:2]。快速访问器 at[] 和 iat[] 只取单个元素,功能与 loc、iloc 类似,但性能更优、速度更快:df.at['2024-02','平安科技'] 用行、列标签(行在前),结果 47.1;df.iat[0, 2] 用整数位置(行在前),结果 3.4。易错点:链式取元素时,按列是先列后行,按行(loc/iloc)和 at/iat 都是先行后列;loc 切片含结束标签,iloc 不含;at/iat 只能取单个元素,不能切片。
df['列标签'] 可处理任意列名;df.列标签 要求列名合法且不与属性/方法重名。df['列标签']['行标签'](列在前、行在后)。df[['列1','列2']]。loc 按标签,iloc 按整数索引。df.loc['行标签']['列标签'](行在前、列在后)。loc 行切片包含结束标签;iloc 切片不含结束位置。行、列可同时切,如 df.iloc[0:2,0:2]、df.iloc[:,0:2]。at[行标签,列标签]、iat[行位置,列位置] 只取单个元素,速度更快。