在处理表格型数据时,一行数据是一个 sample,列就是待提取的特征。怎么选取其中的一些列呢?本文分享一些方法。

使用如下的数据作为例子:

import pandas as pd
data = pd.DataFrame({'Name':['Anna', 'Betty', 'Richard', 'Philip','Paul'],'course1':[85,83,90,84,85],'course2':[90,85,83,88,84],'course3':[82,86,81,91,85],'fruit':['apple','banana','apple','orange','peach'],'sport':['basketball', 'volleyball', 'football', 'basketball','baseball']},index=[1,2,3,4,5])df = pd.DataFrame(data)
df
Name course1 course2 course3 fruit sport
1 Anna 85 90 82 apple basketball
2 Betty 83 85 86 banana volleyball
3 Richard 90 83 81 apple football
4 Philip 84 88 91 orange basketball
5 Paul 85 84 85 peach baseball

方法一:df[columns]

先看最简单的情况。输入列名,选择一列。例如:

df['course2']
1    90
2    85
3    83
4    88
5    84
Name: course2, dtype: int64

df[column list]:选择列。例如:

df[['course2','fruit']]
course2 fruit
1 90 apple
2 85 banana
3 83 apple
4 88 orange
5 84 peach

或者以 column list (list 变量)的形式导入到 df[ ] 中,例如:

select_cols=['course2','fruit']
df[select_cols]
course2 fruit
1 90 apple
2 85 banana
3 83 apple
4 88 orange
5 84 peach

可以用 column list=df.columns[start:end] 的方式选择连续列,start 和 end 均为数字,不包括 end 列。例如:

select_cols=df.columns[1:4]
df[select_cols]
course1 course2 course3
1 85 90 82
2 83 85 86
3 90 83 81
4 84 88 91
5 85 84 85

你可能注意到,其中有 3 列的名字相近:‘course1’,‘course2’,‘course3’。怎么提取这三列呢?这里分享在Kaggle 上看到 一位大神使用的 list comprehension方法。

select_cols=[c for c in df.columns if 'course' in c]
df[select_cols]
course1 course2 course3
1 85 90 82
2 83 85 86
3 90 83 81
4 84 88 91
5 85 84 85

但是,如果你想输入df['course1':'course3'] 来索引连续列,就会报错。而输入数字索引df[1:3]时,结果不再是列索引,而是行索引,如下所示:

df[1:3]
Name course1 course2 course3 fruit sport
2 Betty 83 85 86 banana volleyball
3 Richard 90 83 81 apple football

以下两种方法 df.loc[]和df.iloc[]就可以解决这个问题,可以明确行或列索引。还可以同时取多行和多列。

方法二:df.loc[]:用 label (行名或列名)做索引。

输入 column_list 选择多列 [:, column_list],括号中第一个: 表示选择全部行。例如:

df.loc[:,['course2','fruit']]
course2 fruit
1 90 apple
2 85 banana
3 83 apple
4 88 orange
5 84 peach

选择连续多列 [:,start_col: end_col],注意:包括 end_col。例如:

df.loc[:,'course2':'fruit']
course2 course3 fruit
1 90 82 apple
2 85 86 banana
3 83 81 apple
4 88 91 orange
5 84 85 peach

选择多行和多列,例如:

df.loc[1:3,'course2':'fruit']
course2 course3 fruit
1 90 82 apple
2 85 86 banana
3 83 81 apple

与 df[ ]类似,df.loc[ ]括号内也可以输入判断语句,结果是对行做筛选。例如:

df.loc[df['course1']>84]
#注:输入df[df['course1']>84],输出结果相同
Name course1 course2 course3 fruit sport
1 Anna 85 90 82 apple basketball
3 Richard 90 83 81 apple football
5 Paul 85 84 85 peach baseball

方法三:df.iloc[]: i 表示 integer,用 integer location(行或列的整数位置,从0开始)做索引。

df.iloc与df.loc用法类似,只是索引项不同。

df.iloc[:,[2,4]]
course2 fruit
1 90 apple
2 85 banana
3 83 apple
4 88 orange
5 84 peach

选择连续多列:df.iloc[:, start_ix:end_ix],注意:不包括 end_ix。例如:

df.iloc[:,2:5]
course2 course3 fruit
1 90 82 apple
2 85 86 banana
3 83 81 apple
4 88 91 orange
5 84 85 peach

选择多行与多列,例如:

df.iloc[1:3,[2,4]]
course2 fruit
2 85 banana
3 83 apple

与 df.loc[] 不同,df.iloc[] 括号内不可以输入判断语句。

觉得本文不错的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!

参考:

1.如何选取dataframe的多列-教程:https://www.geeksforgeeks.org/how-to-select-multiple-columns-in-a-pandas-dataframe/

2.用 list comprehension 选择多列:https://www.kaggle.com/code/robikscube/ieee-fraud-detection-first-look-and-eda/notebook

3.df.loc 与 df.iloc 的比较:https://stackoverflow.com/questions/31593201/how-are-iloc-and-loc-different

pandas中如何提取DataFrame的某些列相关推荐

  1. pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数

    pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数 目录 pandas比较两个da

  2. pandas中两个dataframe的交集和差集

    Pandas中两个dataframe的交集和差集_ljp1919的专栏-CSDN博客_pandas 差集

  3. Pandas中isin函数 Dataframe提取(删除)指定行列

    本文介绍主要结介绍用isin函数提取和删除Dataframe指定行列: isin函数(条件前加~表示isin函数的逆函数) 1. 返回含有具体条件的dataframe, 如返回 'A'列中含有 [4, ...

  4. Pandas 中 Series 和 DataFrame 知识点

    Series Series对象的创建 # pandas 学习 import pandas as pd from pandas import Series,DataFrame import numpy ...

  5. Pandas中Series和DataFrame的索引

    在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. ...

  6. Pandas中的实用dataframe操作汇总(持续更新中)

    参考链接:pandas中DataFrame操作(一) 文章目录 切片选择 loc 行筛选 生成dataframe并写入csv 根据不同分隔符.字符编码等读取csv,并更改列名 写入excel 读exc ...

  7. Pandas 根据一张DataFrame的两列数据对另一张DataFrame的多列值进行批量替换

    背景 掌柜最近在做王者荣耀2022KPL春季赛的赛事数据分析,下表kpl是从官方数据平台获取到的2022KPL春季赛常规赛近500场的赛事数据: 这里大家可以很明显的看到team_bh和team_ph ...

  8. python科学计算笔记(三)pandas中Series和DataFrame练习

    from pandas import Series, DataFrame# Series接收list或dict作为一维数据 #两个属性:values, index #① s1 = Series([4, ...

  9. pandas中两个dataframe差集

    https://www.cnblogs.com/johnyang/p/12849351.html drop_duplicates去重参数详解 https://blog.csdn.net/dzysuns ...

最新文章

  1. 科技产品下一个重大突破将来自芯片堆叠技术
  2. unity3d鼠标拖拽模型,旋转模型
  3. Hadoop教程(三):HDFS、MapReduce、程序入门实践
  4. [Python学习记录]——Hello Python
  5. 牛客网 【每日一题】7月24日题目精讲—小A的柱状图
  6. JS实现星星评分功能实例代码(两种方法)
  7. poj-3667(线段树区间合并)
  8. 字符串处理,查询第一个不是 0 的字符的位置
  9. 来啊,一起造作啊!10月仍然还有十多场新品发布会...
  10. 优秀的模糊测试代码是如何炼成的?
  11. global http proxy configuration on ubuntu
  12. 献给初学者,[winform]中如何设计高效全局的快捷键?[ShortcutKeys]
  13. Linq to Sql 聚合查询
  14. 一个悄然崛起的国产软件,太强了!
  15. 开发者API资源(接口整理)
  16. 【codejam_Round1B_C】Mousetrap
  17. 51.php-fpm的pool 慢日志 open_basedir 进程管理
  18. 九个帮你提高开发效率的现代CSS框架
  19. SuperCollider学习笔记(一)- 振荡器(Oscillators)
  20. 【计算机网络】什么是因特网

热门文章

  1. 路由器交换与配置综合实验(二)外网
  2. 18 张图解支付宝钱包系统架构!
  3. 实时音频编解码之十六 Opus解码
  4. 使用openssl制作https的证书
  5. Mysql入门【Mysql约束】
  6. linux wifi设置和相关介绍
  7. 【笔记】COA课内实验-MMX指令集
  8. 设计模式(三)- 责任链模式
  9. python版 1032 挖掘机技术哪家强 (20分)
  10. STC12C5A60S2自主适应时钟延时函数