按列切片数据帧但黑名单中的列

时间:2016-11-18 10:40:45

标签: python pandas dataframe

我想得到一个来自数据帧的子集,但是我想忽略一些标签中的一些列(K-means使用分类列实现)所以我想找到一种摆脱标签的方法,只有休息我想用。 这是数据帧:

         28        29        30        31        32  Phase  clusterIndex
0  0.007871  0.004631  0.000963  0.000092  0.000438      D             0
1  0.003459  0.000730  0.000332  0.000012  0.000433      D             0
2  0.003261  0.002412  0.000852  0.000042  0.000202      D             0
3  0.001358  0.000313  0.000611  0.000029  0.000596      D             1
4  0.001713  0.000203  0.000069  0.000038  0.000069      D             1
5  0.001656  0.000041  0.000048  0.000221  0.000045      D             1
6  0.001348  0.000023  0.000107  0.000316  0.000109      D             1
7  0.001544  0.000194  0.000138  0.000829  0.000138      D             1
8  0.000359  0.000469  0.000278  0.000290  0.000279      D             1
9  0.000397  0.000351  0.000232  0.000449  0.000230      D             1

我只想将'Phase'和'clusterIndex'删除到要处理的新数据帧。

1 个答案:

答案 0 :(得分:0)

您可以使用list comprehension

blacklisted = ['Phase', 'clusterIndex']

cols = [col for col in df.columns if col not in blacklisted]
print (cols)
['28', '29', '30', '31', '32']

print (df[cols])
         28        29        30        31        32
0  0.007871  0.004631  0.000963  0.000092  0.000438
1  0.003459  0.000730  0.000332  0.000012  0.000433
2  0.003261  0.002412  0.000852  0.000042  0.000202
3  0.001358  0.000313  0.000611  0.000029  0.000596
4  0.001713  0.000203  0.000069  0.000038  0.000069
5  0.001656  0.000041  0.000048  0.000221  0.000045
6  0.001348  0.000023  0.000107  0.000316  0.000109
7  0.001544  0.000194  0.000138  0.000829  0.000138
8  0.000359  0.000469  0.000278  0.000290  0.000279
9  0.000397  0.000351  0.000232  0.000449  0.000230

difference

blacklisted = ['Phase', 'clusterIndex']

cols = df.columns.difference(blacklisted)
print (cols)
Index(['28', '29', '30', '31', '32'], dtype='object')

print (df[cols])
         28        29        30        31        32
0  0.007871  0.004631  0.000963  0.000092  0.000438
1  0.003459  0.000730  0.000332  0.000012  0.000433
2  0.003261  0.002412  0.000852  0.000042  0.000202
3  0.001358  0.000313  0.000611  0.000029  0.000596
4  0.001713  0.000203  0.000069  0.000038  0.000069
5  0.001656  0.000041  0.000048  0.000221  0.000045
6  0.001348  0.000023  0.000107  0.000316  0.000109
7  0.001544  0.000194  0.000138  0.000829  0.000138
8  0.000359  0.000469  0.000278  0.000290  0.000279
9  0.000397  0.000351  0.000232  0.000449  0.000230
<{> Numpy solutionnumpy.setdiff1d

blacklisted = ['Phase', 'clusterIndex']

cols = np.setdiff1d(df.columns, blacklisted)
print (cols)
['28' '29' '30' '31' '32']

print (df[cols])
         28        29        30        31        32
0  0.007871  0.004631  0.000963  0.000092  0.000438
1  0.003459  0.000730  0.000332  0.000012  0.000433
2  0.003261  0.002412  0.000852  0.000042  0.000202
3  0.001358  0.000313  0.000611  0.000029  0.000596
4  0.001713  0.000203  0.000069  0.000038  0.000069
5  0.001656  0.000041  0.000048  0.000221  0.000045
6  0.001348  0.000023  0.000107  0.000316  0.000109
7  0.001544  0.000194  0.000138  0.000829  0.000138
8  0.000359  0.000469  0.000278  0.000290  0.000279
9  0.000397  0.000351  0.000232  0.000449  0.000230

drop列的解决方案:

blacklisted = ['Phase', 'clusterIndex']
print (df.drop(blacklisted, axis=1))
         28        29        30        31        32
0  0.007871  0.004631  0.000963  0.000092  0.000438
1  0.003459  0.000730  0.000332  0.000012  0.000433
2  0.003261  0.002412  0.000852  0.000042  0.000202
3  0.001358  0.000313  0.000611  0.000029  0.000596
4  0.001713  0.000203  0.000069  0.000038  0.000069
5  0.001656  0.000041  0.000048  0.000221  0.000045
6  0.001348  0.000023  0.000107  0.000316  0.000109
7  0.001544  0.000194  0.000138  0.000829  0.000138
8  0.000359  0.000469  0.000278  0.000290  0.000279
9  0.000397  0.000351  0.000232  0.000449  0.000230