У меня есть DataFrame, где я хочу изменить несколько столбцов от типа 'object' до 'category'.Как изменить несколько столбцов Pandas DF на категориальные без цикла
я могу изменить несколько столбцов одновременно для поплавка,
dftest[['col3', 'col4', 'col5', 'col6']] = \
dftest[['col3', 'col4', 'col5', 'col6']].astype(float)
Для «категории» Я не могу это сделать то же самое, что мне нужно сделать один за другим (или в цикле, как here) ,
for col in ['col1', 'col2']:
dftest[col] = dftest[col].astype('category')
Вопрос: Есть ли способ сделать изменения для всех столбцов хотели сразу, как в примере «поплавок»?
Если я пытаюсь сделать несколько столбцов одновременно у меня есть:
dftest[['col1','col2']] = dftest[['col1','col2']].astype('category')
## NotImplementedError: > 1 ndim Categorical are not supported at this time
Мой текущий код Дрессировка:
import numpy as np
import pandas as pd
factors= np.array([
['a', 'xx'],
['a', 'xx'],
['ab', 'xx'],
['ab', 'xx'],
['ab', 'yy'],
['cc', 'yy'],
['cc', 'zz'],
['d', 'zz'],
['d', 'zz'],
['g', 'zz']
])
values = np.random.randn(10,4).round(2)
dftest = pd.DataFrame(np.hstack([factors,values]),
columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6'])
#dftest[['col1','col2']] = dftest[['col1','col2']].astype('category')
## NotImplementedError: > 1 ndim Categorical are not supported at this time
## it works with individual astype
#dftest['col2'] = dftest['col2'].astype('category')
#dftest['col1'] = dftest['col1'].astype('category')
print(dftest)
## doing a loop
for col in ['col1', 'col2']:
dftest[col] = dftest[col].astype('category')
dftest[['col3', 'col4', 'col5', 'col6']] = \
dftest[['col3', 'col4', 'col5', 'col6']].astype(float)
dftest.dtypes
выход:
col1 category
col2 category
col3 float64
col4 float64
col5 float64
col6 float64
dtype: object
== [обновление] ==
У меня нет проблемы с использованием цикла теперь, когда я знаю трюк, но я задал вопрос, потому что я хотел узнать/понять, ПОЧЕМУ мне нужно сделать цикл для категории, а не для float, если там это не другой способ сделать это.
из любопытства, какой смысл? Скорость? – IanS
@IanS см. Мое обновление –
«Не реализовано» обычно означает, что это планируется для будущей версии. Категориально относительно новые, поэтому мы можем ожидать, что '.astype ('category)' будет работать более чем в 1 столбце в будущем. – ayhan