Нужно или полезно преобразовывать столбец панды из объекта в строку или тип int / float? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть панда df с двумя переменными:

id    name
011    Peter Parker
022    Warners Brother
101    Bruce Wayne

В настоящее время они оба имеют тип объекта.

Скажем, я хочу создать меньшие кадры данных путем фильтрации с некоторыми условиями

df_small = df.loc[df['id']=='011']
df_small2 = df.loc[df['name']=='Peter Parker']

Я думал и видел людей , преобразовывающих столбец типа объекта в другой конкретный тип данных. Мой вопрос, нужно ли мне вообще это делать, если я уже могу фильтровать их на основе сравнения строк (как указано выше)? Каковы преимущества преобразования их в конкретную строку или тип int / float?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы спрашивали о преимуществах конвертации из 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

Этот тип разницы в скорости может в некоторых случаях значительно ускорить ваш код.

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