Вы спрашивали о преимуществах конвертации из string
или object
dtypes. Есть как минимум 2, о которых я могу думать сразу. Возьмите следующий кадр данных, например:
df = pd.DataFrame({'int_col':np.random.randint(0,10,10000), 'str_col':np.random.choice(list('1234567980'), 10000)})
>>> df.head()
int_col str_col
0 7 0
1 0 1
2 1 8
3 6 1
4 6 0
Этот фрейм данных содержит 10000 строк и имеет один столбец int
и один столбец object
(т.е. строка) для отображения.
Преимущество памяти:
Целочисленный столбец занимает намного меньше памяти, чем столбец объекта:
>>> import sys
>>> sys.getsizeof(df['int_col'])
80104
>>> sys.getsizeof(df['str_col'])
660104
Преимущество в скорости:
Поскольку в вашем примере речь идет о фильтрации, обратите внимание на разницу в скорости при фильтрации по целым числам вместо строк:
import timeit
def filter_int(df=df):
return df.loc[df.int_col == 1]
def filter_str(df=df):
return df.loc[df.str_col == '1']
>>> timeit.timeit(filter_int, number=100) / 100
0.0006298311000864488
>>> timeit.timeit(filter_str, number=100) / 100
0.0016585511100129225
Этот тип разницы в скорости может в некоторых случаях значительно ускорить ваш код.