Быстрый способ превращения категориальной Pandas серии в строку - PullRequest
1 голос
/ 06 января 2020

У меня есть категориальная серия.

В данный момент я сопоставляю строку, используя следующий код.

import pandas as pd
import numpy as np
test = np.random.rand(int(5e6)) 
test[0] = np.nan          
test_cut = pd.cut(test,(-np.inf,0.2,0.4,np.inf))   
test_str = test_cut.astype('str')
test_str[test_str.isna()] = 'missing'

Эта операция astype ('str') очень медленная , есть ли способ ускорить это?

Основываясь на ссылке ниже, я понимаю, что применять быстрее, чем astype. Я попробовал следующее.

test_str = test_cut.apply(str)    
#AttributeError: 'Categorical' object has no attribute 'apply'

test_str = test_cut.map(str)   
# still categorical type

test_str = test_cut.values.astype(str)  
# AttributeError: 'Categorical' object has no attribute 'values'

Преобразование серии целых чисел в строки - почему применяется намного быстрее, чем astype?

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

В качестве альтернативы, есть ли способ определить новую категорию в категории test_cut «Отсутствует» (или что-то еще) и установить «пропущенные» случаи в «test» для этой категории?

# some code to create 'MISSING' category
test_cat[test_str.isna()] = 'MISSING'

1 Ответ

1 голос
/ 06 января 2020

Используйте параметр меток для генерации строк вместо pd.Intevals:

breaks = [-np.inf, .2, .4, np.inf]
test_cut = pd.cut(test,breaks, labels=pd.IntervalIndex.from_breaks(breaks).astype(str)) 

Попробуйте синхронизировать с этим кодом.

...