如何从df中选择列a和b,并将它们保存到新的数据帧df1中?
index a b c
1 2 3 4
2 3 4 5
尝试失败:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
如何从df中选择列a和b,并将它们保存到新的数据帧df1中?
index a b c
1 2 3 4
2 3 4 5
尝试失败:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
当前回答
您可以提供要删除的列的列表,并使用Pandas DataFrame上的drop()函数仅返回所需的列。
只是说说而已
colsToDrop = ['a']
df.drop(colsToDrop, axis=1)
将返回仅包含列b和c的DataFrame。
此处记录了drop方法。
其他回答
我已经看到了几个答案,但其中一个仍然不清楚。你会如何选择那些感兴趣的专栏?
答案是,如果您将它们收集在列表中,则可以使用列表引用列。
实例
print(extracted_features.shape)
print(extracted_features)
(63,)
['f000004' 'f000005' 'f000006' 'f000014' 'f000039' 'f000040' 'f000043'
'f000047' 'f000048' 'f000049' 'f000050' 'f000051' 'f000052' 'f000053'
'f000054' 'f000055' 'f000056' 'f000057' 'f000058' 'f000059' 'f000060'
'f000061' 'f000062' 'f000063' 'f000064' 'f000065' 'f000066' 'f000067'
'f000068' 'f000069' 'f000070' 'f000071' 'f000072' 'f000073' 'f000074'
'f000075' 'f000076' 'f000077' 'f000078' 'f000079' 'f000080' 'f000081'
'f000082' 'f000083' 'f000084' 'f000085' 'f000086' 'f000087' 'f000088'
'f000089' 'f000090' 'f000091' 'f000092' 'f000093' 'f000094' 'f000095'
'f000096' 'f000097' 'f000098' 'f000099' 'f000100' 'f000101' 'f000103']
我有以下列表/NumPy数组extracted_features,指定了63列。原始数据集有103列,我想提取这些列,然后使用
dataset[extracted_features]
你最终会得到这个
这是你在机器学习中经常用到的东西(更具体地说,在特征选择中)。我也想讨论其他方式,但我认为其他Stack Overflower用户已经涵盖了这一点。
若要排除某些列,可以将它们放在列索引中。例如:
A B C D
0 1 10 100 1000
1 2 20 200 2000
选择除两个以外的所有选项:
df[df.columns.drop(['B', 'D'])]
输出:
A C
0 1 100
1 2 200
也可以使用truncate方法选择中间列:
df.truncate(before='B', after='C', axis=1)
输出:
B C
0 10 100
1 20 200
In [39]: df
Out[39]:
index a b c
0 1 2 3 4
1 2 3 4 5
In [40]: df1 = df[['b', 'c']]
In [41]: df1
Out[41]:
b c
0 3 4
1 4 5
要选择多个列,请提取并查看它们:df是先前命名的数据帧。然后创建一个新的数据帧df1,并选择要提取和查看的列a到D。
df1 = pd.DataFrame(data_frame, columns=['Column A', 'Column B', 'Column C', 'Column D'])
df1
将显示所有必需的列!
从0.11.0版起,可以使用.loc索引器以尝试的方式对列进行切片:
df.loc[:, 'C':'E']
相当于
df[['C', 'D', 'E']] # or df.loc[:, ['C', 'D', 'E']]
并返回列C到E。
随机生成的DataFrame演示:
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df.head()
Out:
A B C D E F
R0 99 78 61 16 73 8
R1 62 27 30 80 7 76
R2 15 53 80 27 44 77
R3 75 65 47 30 84 86
R4 18 9 41 62 1 82
要获取从C到E的列(请注意,与整数切片不同,列中包含E):
df.loc[:, 'C':'E']
Out:
C D E
R0 61 16 73
R1 30 80 7
R2 80 27 44
R3 47 30 84
R4 41 62 1
R5 5 58 0
...
这同样适用于基于标签选择行。从这些列中获取行R6到R10:
df.loc['R6':'R10', 'C':'E']
Out:
C D E
R6 51 27 31
R7 83 19 18
R8 11 67 65
R9 78 27 29
R10 7 16 94
.loc还接受布尔数组,因此您可以选择数组中相应条目为True的列。例如,df.columns.isin(list('BCD'))返回array([False,True,True,False,False,False],dtype=bool)-如果列名在列表['B','C','D']中,则返回True;否则为False。
df.loc[:, df.columns.isin(list('BCD'))]
Out:
B C D
R0 78 61 16
R1 27 30 80
R2 53 80 27
R3 65 47 30
R4 9 41 62
R5 78 5 58
...