pandas dataframe 如何选择多列

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

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

import pandas as pd

1

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)

1

2

3

4

5

6

7

8

9

df

1

Namecourse1course2course3fruitsport

1Anna859082applebasketball

2Betty838586bananavolleyball

3Richard908381applefootball

4Philip848891orangebasketball

5Paul858485peachbaseball

方法一:df[columns]

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

df['course2']

1

1 90

2 85

3 83

4 88

5 84

Name: course2, dtype: int64

1

2

3

4

5

6

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

df[['course2','fruit']]

1

course2fruit

190apple

285banana

383apple

488orange

584peach

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

select_cols=['course2','fruit']

df[select_cols]

1

2

course2fruit

190apple

285banana

383apple

488orange

584peach

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

select_cols=df.columns[1:4]

df[select_cols]

1

2

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]

1

2

course1course2course3

1859082

2838586

3908381

4848891

5858485

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

df[1:3]

1

Namecourse1course2course3fruitsport

2Betty838586bananavolleyball

3Richard908381applefootball

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

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

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

df.loc[:,['course2','fruit']]

1

course2fruit

190apple

285banana

383apple

488orange

584peach

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

df.loc[:,'course2':'fruit']

1

course2course3fruit

19082apple

28586banana

38381apple

48891orange

58485peach

选择多行和多列,例如:

df.loc[1:3,'course2':'fruit']

1

course2course3fruit

19082apple

28586banana

38381apple

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

df.loc[df['course1']>84]

#注:输入df[df['course1']>84],输出结果相同

1

2

Namecourse1course2course3fruitsport

1Anna859082applebasketball

3Richard908381applefootball

5Paul858485peachbaseball

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

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

df.iloc[:,[2,4]]

1

course2fruit

190apple

285banana

383apple

488orange

584peach

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

df.iloc[:,2:5]

1

course2course3fruit

19082apple

28586banana

38381apple

48891orange

58485peach

选择多行与多列,例如:

df.iloc[1:3,[2,4]]

1

course2fruit

285banana

383apple

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

读取数据为dataFrame格式后,需要对数据进行访问操作。

首先生成数据,并进行打印,可以看到数据格式如下:

import pandas as pd
data_list = [[56,2,32],[51,5,45],[31,14,25],[13,24,75]]
df = pd.DataFrame(data_list,columns=['A','B','C'])
print(df)

为方便直观的看到数据访问差别,在此将index数据修改为row1,row2,row3,row4

df.index = ['row1','row2','row3','row4']
print(df)

修改后的index为:

. loc是按照行名列名进行访问,iloc按照位置进行访问。

就是说第0行第0列,与row1,A访问的位置是同一个位置,数据是同一个数据。

res1 = df.loc['row1','A']
print(res1)

res2 = df.iloc[0,0]
print(res2)

可以从调试中看到:

访问多行多列

#访问多行多列:
res3 = df.loc['row1',['A','B']]
print(res3)

res4 = df.iloc[0,0:2]
print(res4)

注意:在iloc中,0:2,从第0行开始,到第二行结束,不包含第二行

访问指定列的所有数据

#访问多行多列:
res5 = df.loc[:,['A','B']]
print(res5)

res6 = df.iloc[:,0:2]
print(res6)

参考:

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

————————————————

版权声明:本文为CSDN博主「宁萌Julie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/applebear1123/article/details/125128742

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandasDataFrame对象的apply方法可以将传入的函数应用到每一列或每一行进行元素级别的运算。通过使用apply方法,可以对多列进行操作。 例如,可以通过lambda表达式来对多列进行处理。可以使用axis参数来指定按行(axis=1)或按列(axis=0)进行操作。比如,通过以下代码可以将A列和B列相加并赋值给C列: df['C'] = df.apply(lambda x: x['A'] + x['B'], axis=1) 另外,也可以使用自定义的函数来操作多列。通过定义一个自定义函数,然后使用apply方法将该函数应用到DataFrame对象的多列上。比如,可以定义一个函数来判断条件,并根据条件来赋值一个新列: def get_wendu_type(x): if x['bWendu'] > 33: return "高温" elif x['yWendu'] < -10: return "低温" else: return "常温" df['wendu_type'] = df.apply(get_wendu_type, axis=1) 以上是两种常见的方法来处理pandas DataFrame对象的多列。可以根据具体的需求选择合适的方法来对多列进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Pandas DataFrame新增一列](https://blog.csdn.net/m0_64336020/article/details/122130294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值