pandas数据选择——基于iloc、loc等方法达到数据选择的多样性
数据选择
1 列选择
1.1 选择某一列/某几列
在Python中我们要想获取某列只需要在表df后面的方括号中指明要选择的列名即可。如果是一列,则只需要传入一个列名;
如果是同时选择多列,则传入多个列名即可,多个列名用一个list存起来
import pandas as pd
df = pd.read_excel(r"D:\testdata\data.xlsx")
print(df.head())
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 省 市 \
0 218.9 0.0 1 218.9 已付款未发货 金色110cm 1个 内蒙古自治区 呼伦贝尔市
1 218.9 0.0 1 218.9 交易关闭 金色120cm 1个 内蒙古自治区 呼伦贝尔市
2 328.9 0.0 1 328.9 交易取消 米白S 1个 山东省 枣庄市
3 218.9 0.0 1 218.9 交易关闭 黑色M 105-120斤 1个 浙江省 嘉兴市
4 185.9 0.0 1 185.9 已付款未发货 黑色L 1个 陕西省 咸阳市
区 会员等级 优惠信息 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
0 新巴尔虎右旗 获取会员信息失败! 无优惠信息 否 0.0 0.0 NaN
1 新巴尔虎右旗 获取会员信息失败! 无优惠信息 否 218.9 0.0 2020-11-12 09:35:43
2 薛城区 获取会员信息失败! 无优惠信息 否 0.0 0.0 NaN
3 桐乡市 获取会员信息失败! 无优惠信息 否 218.9 0.0 2020-11-12 06:37:25
4 杨陵区 获取会员信息失败! 无优惠信息 是 0.0 0.0 NaN
print(df["省"].head())
0 内蒙古自治区
1 内蒙古自治区
2 山东省
3 浙江省
4 陕西省
Name: 省, dtype: object
print(df[["省","市"]].head())
省 市
0 内蒙古自治区 呼伦贝尔市
1 内蒙古自治区 呼伦贝尔市
2 山东省 枣庄市
3 浙江省 嘉兴市
4 陕西省 咸阳市
除了传入具体的列名,我们还可以传入具体列的位置,即第几列,对数据进行选取,通过传入位置来获取数据时需要用到iloc方法
df.iloc[:,1:6].head() # 选取第1-5列的前五行数据
运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | |
---|---|---|---|---|---|
0 | 0.0 | 1 | 218.9 | 已付款未发货 | 金色110cm 1个 |
1 | 0.0 | 1 | 218.9 | 交易关闭 | 金色120cm 1个 |
2 | 0.0 | 1 | 328.9 | 交易取消 | 米白S 1个 |
3 | 0.0 | 1 | 218.9 | 交易关闭 | 黑色M 105-120斤 1个 |
4 | 0.0 | 1 | 185.9 | 已付款未发货 | 黑色L 1个 |
df.iloc[:,[1,5]].head() # 选取第一列、第五列的前五行数据
运费(元) | 商品SKU信息 | |
---|---|---|
0 | 0.0 | 金色110cm 1个 |
1 | 0.0 | 金色120cm 1个 |
2 | 0.0 | 米白S 1个 |
3 | 0.0 | 黑色M 105-120斤 1个 |
4 | 0.0 | 黑色L 1个 |
iloc 后的方括号中逗号之前的部分表示要获取的行的位置,只输入一个冒号,不输入任何数值表示获取所有的行;逗号之后的方括号表示要获取的列的位置,列的位置同样是也是从0开始计数。
loc、iloc、ix方法的使用:
loc:值索引通过选取行(列)标签索引数据,通过行索引 “Index” 中的具体值来取行数据
iloc:位置索引,通过选取行(列)位置编号索引数据,列表形式
ix:既可以通过行(列)标签索引数据,也可以通过行(列)位置编号索引数据
df.loc[:,"省":"区"].head() # 选取省,市,区的前五行数据
省 | 市 | 区 | |
---|---|---|---|
0 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 |
1 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 |
2 | 山东省 | 枣庄市 | 薛城区 |
3 | 浙江省 | 嘉兴市 | 桐乡市 |
4 | 陕西省 | 咸阳市 | 杨陵区 |
df.loc[:,["省","市","区"]].head() # 选取省,市,区的前五行数据
省 | 市 | 区 | |
---|---|---|---|
0 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 |
1 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 |
2 | 山东省 | 枣庄市 | 薛城区 |
3 | 浙江省 | 嘉兴市 | 桐乡市 |
4 | 陕西省 | 咸阳市 | 杨陵区 |
1.2 选择连续的某几列
df.iloc[:,1:5].head() # 选取连续的第1到4列
运费(元) | 数量 | 实际支付(元) | 状态 | |
---|---|---|---|---|
0 | 0.0 | 1 | 218.9 | 已付款未发货 |
1 | 0.0 | 1 | 218.9 | 交易关闭 |
2 | 0.0 | 1 | 328.9 | 交易取消 |
3 | 0.0 | 1 | 218.9 | 交易关闭 |
4 | 0.0 | 1 | 185.9 | 已付款未发货 |
iloc后的方括号中逗号之前的表示选择的行,当只传入一个冒号时,表示选择所有行;
逗号后面表示要选择列的位置区间,1:5表示选择第2列到第5列之间的值(包含第2列但不包含第5列),我们把这种通过传入一个位置区间来获取数据的方式称为切片索引。
1.3 利用loc、iloc提取指定行、列数据
df.loc[[0,3],["省","市"]] # 选取第0行与第3行的省与市的数据
省 | 市 | |
---|---|---|
0 | 内蒙古自治区 | 呼伦贝尔市 |
3 | 浙江省 | 嘉兴市 |
df.iloc[[0,3],[6,7]] # 选取第0行与第3行的省与市的数据
省 | 市 | |
---|---|---|
0 | 内蒙古自治区 | 呼伦贝尔市 |
3 | 浙江省 | 嘉兴市 |
1.4 利用loc函数,根据某个数据来提取数据所在的行
df.loc[df["省"]=="内蒙古自治区"]
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | 省 | 市 | 区 | 会员等级 | 优惠信息 | 是否白付美支付 | 货款退款金额 | 运费退款金额 | 退款完成时间 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 218.9 | 0.0 | 1 | 218.9 | 已付款未发货 | 金色110cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
1 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 金色120cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 09:35:43 |
52 | 199.0 | 0.0 | 1 | 199.0 | 交易取消 | 黑色M 105-120斤 1个 | 内蒙古自治区 | 呼和浩特市 | 清水河县 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
传入多个条件, 连接符号 &
df.loc[(df["省"]=="内蒙古自治区")&(df["商品SKU信息"]=="黑色M 105-120斤 1个")]
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | 省 | 市 | 区 | 会员等级 | 优惠信息 | 是否白付美支付 | 货款退款金额 | 运费退款金额 | 退款完成时间 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
52 | 199.0 | 0.0 | 1 | 199.0 | 交易取消 | 黑色M 105-120斤 1个 | 内蒙古自治区 | 呼和浩特市 | 清水河县 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
1.5 选择单列多行、多列多行
df["状态"][0:3] # 选择状态列第0到2行
0 已付款未发货
1 交易关闭
2 交易取消
Name: 状态, dtype: object
df[["状态","商品SKU信息"]][0:3] # 选择状态列、商品SKU信息列的第0到2行
状态 | 商品SKU信息 | |
---|---|---|
0 | 已付款未发货 | 金色110cm 1个 |
1 | 交易关闭 | 金色120cm 1个 |
2 | 交易取消 | 米白S 1个 |
2 行选择
2.1 选择某一行/某几行
在Python中,获取行的方式主要有两种,一种是普通索引,即传入具体行索引的名称,需要用到loc方法;另一种是位置索引,即传入具体的行数,需要用到iloc方法。
df.loc[1] # 选取索引值为1的行(第2行)
实际价格(元) 218.9
运费(元) 0
数量 1
实际支付(元) 218.9
状态 交易关闭
商品SKU信息 金色120cm 1个
省 内蒙古自治区
市 呼伦贝尔市
区 新巴尔虎右旗
会员等级 获取会员信息失败!
优惠信息 无优惠信息
是否白付美支付 否
货款退款金额 218.9
运费退款金额 0
退款完成时间 2020-11-12 09:35:43
Name: 1, dtype: object
df.loc[[1,3],["订单编号","物品名称"]] # 提取index为'1','3',列名为'订单编号','物品名称'中的数据
订单编号 | 物品名称 | |
---|---|---|
1 | 96941475341528 | 【叶子yzzz】叶子专享】DSR08B0660鸭鸭男童羽绒服 |
3 | 96940910667716 | 【叶子yzzz】鸭鸭新款女装羽绒服DRH06B0050 |
df.iloc[[1,3]] # 选取行索引为1 与 3 的行数据
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | 省 | 市 | 区 | 会员等级 | 优惠信息 | 是否白付美支付 | 货款退款金额 | 运费退款金额 | 退款完成时间 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 金色120cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 09:35:43 |
3 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 黑色M 105-120斤 1个 | 浙江省 | 嘉兴市 | 桐乡市 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 06:37:25 |
2.2 选择满足条件的行
在Python中,我们直接在表名后面指明哪列要满足什么条件,就可以把满足条件的数据筛选出来。
df["实际价格(元)"]>200 # 判断实际价格是否大于200,返回True,False
0 True
1 True
2 True
3 True
4 False
...
83 True
84 True
85 True
86 True
87 True
Name: 实际价格(元), Length: 88, dtype: bool
df[df["实际价格(元)"]>200].head() # 选择实际价格大于200的前5行数据
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | 省 | 市 | 区 | 会员等级 | 优惠信息 | 是否白付美支付 | 货款退款金额 | 运费退款金额 | 退款完成时间 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 218.9 | 0.0 | 1 | 218.9 | 已付款未发货 | 金色110cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
1 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 金色120cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 09:35:43 |
2 | 328.9 | 0.0 | 1 | 328.9 | 交易取消 | 米白S 1个 | 山东省 | 枣庄市 | 薛城区 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
3 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 黑色M 105-120斤 1个 | 浙江省 | 嘉兴市 | 桐乡市 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 06:37:25 |
7 | 416.9 | 0.0 | 1 | 416.9 | 交易关闭 | 豆绿色S(90-105斤) 1个 | 湖南省 | 衡阳市 | 耒阳市 | 获取会员信息失败! | 无优惠信息 | 是 | 416.9 | 0.0 | 2020-11-12 08:47:19 |
传入多个条件, 连接符号 &
df[(df["实际价格(元)"]>200) & (df["实际支付(元)"]<300)] # 选择实际价格大于200和实际支付小于300的行
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品SKU信息 | 省 | 市 | 区 | 会员等级 | 优惠信息 | 是否白付美支付 | 货款退款金额 | 运费退款金额 | 退款完成时间 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 218.9 | 0.0 | 1 | 218.9 | 已付款未发货 | 金色110cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 0.0 | 0.0 | NaN |
1 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 金色120cm 1个 | 内蒙古自治区 | 呼伦贝尔市 | 新巴尔虎右旗 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 09:35:43 |
3 | 218.9 | 0.0 | 1 | 218.9 | 交易关闭 | 黑色M 105-120斤 1个 | 浙江省 | 嘉兴市 | 桐乡市 | 获取会员信息失败! | 无优惠信息 | 否 | 218.9 | 0.0 | 2020-11-12 06:37:25 |
2.2 普通索引+普通索引选择指定的行和列
普通索引+普通索引就是通过同时传入行和列的索引名称进行数据选择,需要用到loc方法
loc方法中的第一对方括号表示行索引的选择,传入行索引名称;loc方法中的第二对方括号表示列索引的选择,传入列索引名称
df.loc[[1,3,5],["实际价格(元)","实际支付(元)"]] # 选择索引值为1,3,5的实际价格和实际支付的行数据
实际价格(元) | 实际支付(元) | |
---|---|---|
1 | 218.9 | 218.9 |
3 | 218.9 | 218.9 |
5 | 196.9 | 196.9 |
2.3 位置索引+位置索引选择指定的行和列
位置索引+位置索引是通过同时传入行、列索引的位置来获取数据,需要用到iloc方法
在iloc方法中的第一对方括号表示行索引的选择,传入要选择行索引的位置;第二对方括号表示列索引的选择,传入要选择列索引的位置。行和列索引的位置都是从0开始计数
df.iloc[[1,3,5],[3,4,5]] # 选择行索引位置为1,3,5的列索引位置为3,4,5的行数据
实际支付(元) | 状态 | 商品SKU信息 | |
---|---|---|---|
1 | 218.9 | 交易关闭 | 金色120cm 1个 |
3 | 218.9 | 交易关闭 | 黑色M 105-120斤 1个 |
5 | 196.9 | 交易关闭 | 黑色M 1个 |
2.4 布尔索引+普通索引选择指定的行和列
布尔索引+普通索引是先对表进行布尔索引选择行,然后通过普通索引选择列
df[df["实际价格(元)"]>200][["运费(元)","数量","实际价格(元)"]]
运费(元) | 数量 | 实际价格(元) | |
---|---|---|---|
0 | 0.0 | 1 | 218.9 |
1 | 0.0 | 1 | 218.9 |
2 | 0.0 | 1 | 328.9 |
3 | 0.0 | 1 | 218.9 |
7 | 0.0 | 1 | 416.9 |
9 | 0.0 | 1 | 328.9 |
11 | 0.0 | 1 | 2199.0 |
41 | 0.0 | 1 | 2199.0 |
44 | 0.0 | 1 | 2199.0 |
69 | 0.0 | 1 | 2199.0 |
83 | 0.0 | 1 | 2199.0 |
84 | 0.0 | 1 | 658.9 |
85 | 0.0 | 1 | 328.9 |
86 | 0.0 | 1 | 328.9 |
87 | 0.0 | 1 | 328.9 |
2.5 切片索引+切片索引选择指定的行和列
切片索引+切片索引是通过同时传入行、列索引的位置区间进行数据选择
df.iloc[0:3,1:3]
运费(元) | 数量 | |
---|---|---|
0 | 0.0 | 1 |
1 | 0.0 | 1 |
2 | 0.0 | 1 |
2.6 切片索引+普通索引选择指定的行和列
df[["实际价格(元)","实际支付(元)"]].iloc[0:2]
实际价格(元) | 实际支付(元) | |
---|---|---|
0 | 218.9 | 218.9 |
1 | 218.9 | 218.9 |
本文地址:https://blog.csdn.net/FGH333xwy/article/details/110431919
上一篇: 幽默的二货同事和坑爹老板
下一篇: 机器学习的意义(ppt 20页)