python pandas dataframe如何获取除了指定列以外的所有列
作者:宇宙全能王
pandas dataframe获取除了指定列以外的所有列
假设有个dataframe叫做df,有[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’]列,但是你只想要除了’e’列之外的所有列
两种方法
方法一
del df['e']
方法二
col = df.columns.values.tolist()
col.remove('e') # 切不可用col = col.remove('e'),或者直接把remove加到上面这行代码中,否则col为空
new_df = df[col].copy()
print(new_df)pandas中提取DataFrame的某些列
在处理表格型数据时,一行数据是一个 sample,列就是待提取的特征。怎么选取其中的一些列呢?本文分享一些方法。
使用如下的数据作为例子:
import pandas as pd
df = 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
| 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[] 括号内不可以输入判断语句。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
