我有以下数据框:
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
这是我阅读时的输出。
总的来说,数据框有76列,我只想选择25列,这些列是名为PORVL2N1
,PORVL2N2
,PORVL4N1
的列,依次如此
直到到达名为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']
输出是:
我想做同样的事情,只选择我感兴趣的列,但使用带有iloc
的python切片来索引和按位置选择,例如我在问题的开头做的。
我知道幻灯片可以实现这一点,但是我无法理解切片sintax的好处。
如何使用iloc
和slice python选择我感兴趣的列?
答案 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
>>>
>>> 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
>>>