網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
在處理表格型數(shù)據(jù)時(shí),一行數(shù)據(jù)是一個(gè) sample,列就是待提取的特征。怎么選取其中的一些列呢?本文分享一些方法。
使用如下的數(shù)據(jù)作為例子:
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]
先看最簡(jiǎn)單的情況。輸入列名,選擇一列。例如:
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 變量)的形式導(dǎo)入到 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] 的方式選擇連續(xù)列,start 和 end 均為數(shù)字,不包括 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'] 來(lái)索引連續(xù)列,就會(huì)報(bào)錯(cuò)。而輸入數(shù)字索引df[1:3]時(shí),結(jié)果不再是列索引,而是行索引,如下所示:
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[]就可以解決這個(gè)問(wèn)題,可以明確行或列索引。還可以同時(shí)取多行和多列。
方法二:df.loc[]:用 label (行名或列名)做索引。
輸入 column_list 選擇多列 [:, column_list],括號(hào)中第一個(gè): 表示選擇全部行。例如:
df.loc[:,['course2','fruit']]
? | course2 | fruit |
---|---|---|
1 | 90 | apple |
2 | 85 | banana |
3 | 83 | apple |
4 | 88 | orange |
5 | 84 | peach |
選擇連續(xù)多列 [:,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[ ]括號(hào)內(nèi)也可以輸入判斷語(yǔ)句,結(jié)果是對(duì)行做篩選。例如:
df.loc[df['course1']>84]
#注:輸入df[df['course1']>84],輸出結(jié)果相同
? | 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(行或列的整數(shù)位置,從0開(kāi)始)做索引。
df.iloc與df.loc用法類似,只是索引項(xiàng)不同。
df.iloc[:,[2,4]]
? | course2 | fruit |
---|---|---|
1 | 90 | apple |
2 | 85 | banana |
3 | 83 | apple |
4 | 88 | orange |
5 | 84 | peach |
選擇連續(xù)多列: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[] 括號(hào)內(nèi)不可以輸入判斷語(yǔ)句。
補(bǔ)充:提取所有列名中包含“線索”、“瀏覽”字段的列
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 = [] # 存儲(chǔ)包含‘線索'字段的列名
for i in columns:
if '線索' in i:
col_xian.append(i)
col_liu = [] # 存儲(chǔ)包含‘瀏覽'字段的列名
for i in columns:
if '瀏覽' in i:
col_liu.append(i)
df_xian = df[col_xian] # 根據(jù)列名取列
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
總結(jié)
原文鏈接:https://blog.csdn.net/applebear1123/article/details/125128742
相關(guān)推薦
- 2022-06-06 解決http://localhost:3000/favicon.ico 的404 問(wèn)題(含案例解析)
- 2022-06-30 詳解Go語(yǔ)言中泛型的實(shí)現(xiàn)原理與使用_Golang
- 2023-04-09 python實(shí)現(xiàn)數(shù)組平移K位問(wèn)題_python
- 2022-03-30 Android中圖片占用內(nèi)存的深入分析_Android
- 2022-11-25 詳解Rust中的方法_Rust語(yǔ)言
- 2022-06-30 opencvsharp瑕疵檢測(cè)的實(shí)現(xiàn)示例_C#教程
- 2022-02-04 sql語(yǔ)句:and與or的優(yōu)先級(jí)
- 2022-08-26 Python使用sqlite3第三方庫(kù)讀寫SQLite數(shù)據(jù)庫(kù)的方法步驟_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支