广告
返回顶部
首页 > 资讯 > 后端开发 > Python >pandas中提取DataFrame某些列的一些方法
  • 846
分享到

pandas中提取DataFrame某些列的一些方法

2024-04-02 19:04:59 846人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言方法一:df[columns]方法二:df.loc[]:用 label (行名或列名)做索引。方法三:df.iloc[]: i 表示 integer,用 integer lo

前言

在处理表格型数据时,一行数据是一个 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
 Namecourse1course2course3fruitsport
1Anna859082applebasketball
2Betty838586bananavolleyball
3Richard908381applefootball
4Philip848891orangebasketball
5Paul858485peachbaseball

方法一:df[columns]

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

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

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

df[['course2','fruit']]
 course2fruit
190apple
285banana
383apple
488orange
584peach

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

select_cols=['course2','fruit']
df[select_cols]
 course2fruit
190apple
285banana
383apple
488orange
584peach

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

select_cols=df.columns[1:4]
df[select_cols]
 course1course2course3
1859082
2838586
3908381
4848891
5858485

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

select_cols=[c for c in df.columns if 'course' in c]
df[select_cols]
 course1course2course3
1859082
2838586
3908381
4848891
5858485

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

df[1:3]
 Namecourse1course2course3fruitsport
2Betty838586bananavolleyball
3Richard908381applefootball

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

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

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

df.loc[:,['course2','fruit']]
 course2fruit
190apple
285banana
383apple
488orange
584peach

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

df.loc[:,'course2':'fruit']
 course2course3fruit
19082apple
28586banana
38381apple
48891orange
58485peach

选择多行和多列,例如:

df.loc[1:3,'course2':'fruit']
 course2course3fruit
19082apple
28586banana
38381apple

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

df.loc[df['course1']>84]
#注:输入df[df['course1']>84],输出结果相同
 Namecourse1course2course3fruitsport
1Anna859082applebasketball
3Richard908381applefootball
5Paul858485peachbaseball

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

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

df.iloc[:,[2,4]]
 course2fruit
190apple
285banana
383apple
488orange
584peach

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

df.iloc[:,2:5]
 course2course3fruit
19082apple
28586banana
38381apple
48891orange
58485peach

选择多行与多列,例如:

df.iloc[1:3,[2,4]]
 course2fruit
285banana
383apple

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

补充:提取所有列名中包含“线索”、“浏览”字段的列

import pandas as pd
 
path = 'F:\python_projects\Python_learning\ershouche.csv'
df = pd.read_csv(open(path), index_col=0)
df = df.fillna(0)  # 填充空值后需赋值
print(df.describe())
 
columns = df.columns.values.tolist()  # 获取列名列表,注意values,tolist的使用
col_xian = []  # 存储包含‘线索'字段的列名
for i in columns:
    if '线索' in i:
        col_xian.append(i)
 
col_liu = [] # 存储包含‘浏览'字段的列名
for i in columns:
    if '浏览' in i:
        col_liu.append(i)
 
df_xian = df[col_xian]  # 根据列名取列
df_liu = df[col_liu]

参考:

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某些列的文章就介绍到这了,更多相关pandas提取DataFrame某些列内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: pandas中提取DataFrame某些列的一些方法

本文链接: https://www.lsjlt.com/news/118520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作