Удаление столбцов набора данных с кусочками питона - PullRequest
0 голосов
/ 06 мая 2018

У меня есть следующий фрейм данных:

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, затем с кусочками питона у меня будет следующее:

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 столбцов, которые являются столбцами с именами 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']

И вывод:

enter image description here

Я хочу сделать то же самое, выбрать только те столбцы, которые меня интересуют, но используя кусочки питона с iloc для индексации и выбора по позиции, как я делаю в начале моего вопроса.

Я знаю, что это возможно с слайдами, но я не могу понять, насколько хорошо синтаксис срезов позволяет его получить.

Как я могу использовать iloc и нарезать python для выбора столбцов интереса?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Использовать обычные обозначения срезов ...

>>> 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
>>>

Выбор по позиции

0 голосов
/ 06 мая 2018

Учитывая, что у вас есть данные в фрейме данных 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.*")) 

Для получения дополнительной информации посмотрите документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...