pandas学习之df.loc

您所在的位置:网站首页 sp500是什么意思 pandas学习之df.loc

pandas学习之df.loc

2023-07-31 03:18| 来源: 网络整理| 查看: 265

pandas学习之df.loc

在数据处理中,经常需要从数据集中提取出部分数据,这种情况下,可以选择df.loc or df.iloc这两种方法。这种方法和df[[列名列表]]类似,但效率上会高于df和列名列表的组合方式。 可以做一个简单的比较:

df.shape#df数据集的概况 (51290, 24) # %timeit 用于测试一段程序运行效率 %timeit df[['Order_Date','Customer_ID','Market']]#df加列名的提取方式 2.85 ms ± 109 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) %timeit df.loc[:,['Order_Date','Customer_ID','Market']]#df.loc的方式 2.6 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) #数据集越大,差距越明显 df.loc篇: 官方文档:

Access a group of rows and columns by label(s) or a boolean array. .loc[] is primarily label based, but may also be used with a boolean array. Allowed inputs are:

A single label, e.g. 5 or ‘a’, (note that 5 is interpreted as a label of the index, and never as an integer position along the index).A list or array of labels, e.g. [‘a’, ‘b’, ‘c’].A slice object with labels, e.g. ‘a’:‘f’. Warning Note that contrary to usual python slices, both the start and the stop are includedA boolean array of the same length as the axis being sliced, e.g. [True, False, True].A callable function with one argument (the calling Series or DataFrame) and that returns valid output for indexing (one of the above) 解释: 需要传入行列或者布尔值的数组:.loc[]不仅允许传入基于标签的数组,还可以是布尔值数组允许的输入类型为: 单个标签,比如‘5’,‘a’。需要注意的是5是行索引上的整数型标签,而不是索引上的第5行,比如有3把椅子,坐着3个人,名字分别是一二三,第3把椅子坐着的是三。3代表这个人处于位置,无论谁坐在这,这里都是第3把椅子;三是这个人名字,无论他在什么位置,他的名字都是三。而.loc[]就是基于标签(名字)来提取的一个标签的列表[‘a’,‘s’]一个标签的切片,如‘a’:‘f’ 注意: .loc[]的切片和python中的不同,这里的切片两端都包括,即左闭右闭区间,而python中是左闭右开区间一个布尔值数组,需要和被切片的轴长度一致一个函数 实验: import pandas as pd import numpy as np df = pd.DataFrame({'name':['张三','李四','王二','麻子','杜甫'],'mark':[120,111,135,150,151],'gender':['male','female','female','male',np.nan]}) df #为方便演示,构造一个简单的dataframe name mark gender 0 张三 120 male 1 李四 111 female 2 王二 135 female 3 麻子 150 male 4 杜甫 151 NaN #单个标签 df.loc[:,'name']#前面的冒号相当于一个切片,即选取所有行,如果直接df.loc['name']会报错 0 张三 #所以可以理解为df.loc[对行的操作,对列的操作],对列可以省略,行不可以 1 李四 2 王二 3 麻子 4 杜甫 Name: name, dtype: object df.loc[0] name 张三 mark 120 gender male Name: 0, dtype: object #标签列表,注意要使用 [[]] 的形式 df.loc[[0,2],'name'] 0 张三 2 王二 Name: name, dtype: object #切片操作,两端都可以取到 df.loc[0:2,'name'] #注意,这里的0:2是标签,不是位置序列!!! 0 张三 1 李四 2 王二 Name: name, dtype: object df.loc[1,'name':'gender']# 这样可能更直观,这是个切片是标签 name 李四 mark 111 gender female Name: 1, dtype: object #可以传入一个布尔值列表 df.loc[:,[False,True,False]]#注意列表长度必须和对应得轴长度一致,否则报错 mark 0 120 1 111 2 135 3 150 4 151 #可以输入条件,筛选出需要的数据 df.loc[df['mark']>=135] name mark gender 2 王二 135 female 3 麻子 150 male 4 杜甫 151 NaN #也可以是函数 df.loc[lambda df: df['mark'] >= 150] name mark gender 3 麻子 150 male 4 杜甫 151 NaN #也可以直接对结果赋值 df.loc[4,'gender'] = 'female' df name mark gender 0 张三 120 male 1 李四 111 female 2 王二 135 female 3 麻子 150 male 4 杜甫 151 female

6.18学习打卡

加油!!!学习虽然不一定会变强,但一定会便变秃


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3