Извлечение столбцов из pandas dataframe без жесткого кодирования - PullRequest
0 голосов
/ 07 мая 2018

Есть ли способ извлечь подмножество столбцов из кадра данных Pandas без указания всех столбцов. например У меня есть датафрейм с фоллом. колонки: str_ID, num_ID, 1990, 1991, 1992, 1993, 1994, 1995 и я хочу извлечь столбцы с 1990 и далее. Как мне сделать это без жесткого кодирования?

df.columns.values
array(['str_ID', 'num_ID', 1990, 1991, 1992, 1993, 1994, 1995], dtype=object)

Ответы [ 2 ]

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

Другой вариант, если в заголовке есть строки, а до 1900 года нет лет:

df = pd.DataFrame({'str_ID':[4,2,4,5,5,4],
               'num_ID': [4,2,4,5,5,4],
               '1990':[4,3,1,2,2,4],
               '1991':[1,2,4,5,5,3],
               '1992':[4,3,2,2,2,4],
               '1993':[4,3,2,2,2,4]})
print df
   1990  1991  1992  1993  num_ID  str_ID
0     4     1     4     4       4       4
1     3     2     3     3       2       2
2     1     4     2     2       4       4
3     2     5     2     2       5       5
4     2     5     2     2       5       5
5     4     3     4     4       4       4

columns = [x for x in df.columns if (x>=1990 and x.isdigit())]
df = df[columns]
print df

Выход:

   1990  1991  1992  1993
0     4     1     4     4
1     3     2     3     3
2     1     4     2     2
3     2     5     2     2
4     2     5     2     2
5     4     3     4     4
0 голосов
/ 07 мая 2018

Вы можете использовать условное понимание для столбцов кадра данных (предполагается, что заголовки столбцов для лет являются целыми числами):

df[sorted(col for col in df if isinstance(col, int) and col >= 1990)]

Этот фильтр фильтрует целочисленные столбцы, большие или равные 1990, и возвращает результат в отсортированном порядке.

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