使用python切片删除数据集列

时间:2018-05-06 01:07:50

标签: python pandas

我有以下数据框:

dataframe = pd.DataFrame({'Date': ['2017-04-01 00:24:17','2017-04-01 00:54:16','2017-04-01 01:24:17'] * 1000, 'Luminosity':[2,3,4] * 1000})

dataframe的输出是:

      Date                Luminosity
0   2017-04-01 00:24:17     2
1   2017-04-01 00:54:16     3
2   2017-04-01 01:24:17     4
.           .               . 
.           .               . 

我想删除或只选择Luminosity列,然后使用python切片我有以下内容:

X = dataframe.iloc[:, 1].values
# Give a new form of the data
X = X.reshape(-1, 1)

X的输出是以下numpy数组:

array([[2],
   [3],
   [4],
   ...,
   [2],
   [3],
   [4]])

我有相同的情况,但有一个包含76列的新数据框,例如this

这是我阅读时的输出。

enter image description here

总的来说,数据框有76列,我只想选择25列,这些列是名为PORVL2N1PORVL2N2PORVL4N1的列,依次如此 直到到达名为PORVL24N2的结束列76th

目前,我所拥有的解决方案是仅使用我感兴趣的列创建一个新的数据框,这是:

a = df[['PORVL2N1', 'PORVL2N2', 'PORVL4N1', 'PORVL5N1', 'PORVL6N1', 'PORVL7N1', 
    'PORVL9N1', 'PORVL9N1', 'PORVL10N1', 'PORVL13N1', 'PORVL14N1', 'PORVL15N1',
    'PORVL16N1', 'PORVL16N2', 'PORVL18N1', 'PORVL18N2', 'PORVL18N3','PORVL18N4',
    'PORVL21N1', 'PORVL21N2', 'PORVL21N3', 'PORVL21N4', 'PORVL21N5', 'PORVL24N1',
    'PORVL24N2']

输出是:

enter image description here

我想做同样的事情,只选择我感兴趣的列,但使用带有iloc的python切片来索引和按位置选择,例如我在问题的开头做的。

我知道幻灯片可以实现这一点,但是我无法理解切片sintax的好处。

如何使用iloc和slice python选择我感兴趣的列?

2 个答案:

答案 0 :(得分:3)

考虑到您拥有数据框df中的数据,您可以执行以下操作:

cols = list(df.columns)
pos_cols = [ i for i, word in enumerate(cols) if word.startswith('PORVL') ]
df.iloc[:, pos_cols]

或者,您可以将.filter()regex一起使用。

df.filter(regex=("PORVL.*")) 

有关详细信息,请查看docs

答案 1 :(得分:2)

使用常规切片表示法......

>>> df
   a  b  c  d  e
0  1  1  1  1  1
1  2  2  2  2  2
2  3  3  3  3  3
3  4  4  4  4  4
4  5  5  5  5  5
>>> df.iloc[:,2:]
   c  d  e
0  1  1  1
1  2  2  2
2  3  3  3
3  4  4  4
4  5  5  5
>>> df.iloc[:,-2:]
   d  e
0  1  1
1  2  2
2  3  3
3  4  4
4  5  5
>>> 

slice objects也可以

>>> last3 = slice(-3,None)
>>> df.iloc[:,last3]
   c  d  e
0  1  1  1
1  2  2  2
2  3  3  3
3  4  4  4
4  5  5  5
>>>

Selection By Position