Каков наилучший способ удаления столбца в пандах? - PullRequest
0 голосов
/ 04 июля 2018

Я поднимаю этот вопрос для самообучения. Насколько я знаю, ниже приведены различные способы удаления столбцов в пандах.

Опция - 1:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
del df['a']

Опция - 2:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df.drop('a',1)

Опция - 3:

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
df=df[['b','c']]
  1. Каков наилучший подход среди этих?
  2. Есть ли другие подходы для достижения того же?

Ответы [ 4 ]

0 голосов
/ 04 июля 2018

С точки зрения скорости вариант 1 кажется лучшим. Очевидно, исходя из других ответов, это не значит, что на самом деле это лучший вариант.

In [52]: import timeit

In [53]: s1 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: del df['a']
    ...: """

In [54]: s2 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: df=df.drop('a',1)
    ...: """

In [55]: s3 = """
    ...: import pandas as pd
    ...: df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10],'c':[11,12,13,14,15]})
    ...: df=df[['b','c']]
    ...: """

In [56]: timeit.timeit(stmt=s1, number=100000)
Out[56]: 53.37321400642395

In [57]: timeit.timeit(stmt=s2, number=100000)
Out[57]: 79.68139410018921

In [58]: timeit.timeit(stmt=s3, number=100000)
Out[58]: 76.25269913673401
0 голосов
/ 04 июля 2018

Следуйте документ :

DataFrame - это 2-мерная помеченная структура данных со столбцами потенциально разных типов.

А pandas.DataFrame.drop:

Удалить указанные метки из строк или столбцов.

Итак, я думаю, что мы должны придерживаться df.drop. Зачем? Я думаю, что плюсы:

  1. Это дает нам больше контроля над действием удаления:

    # This will return a NEW DataFrame object, leave the original `df` untouched.
    df.drop('a', axis=1)  
    # This will modify the `df` inplace. **And return a `None`**.
    df.drop('a', axis=1, inplace=True)  
    
  2. Он может обрабатывать более сложные случаи с помощью аргументов. Например. с level мы можем обработать удаление MultiIndex. А с errors мы можем предотвратить некоторые ошибки.

  3. Это более унифицированный и объектно-ориентированный способ.


И точно так же, как @jezrael отметил в своем ответе:

Вариант 1: использование ключевого слова del является ограниченным способом.

Вариант 3: И df=df[['b','c']] по сути даже не удаление. Сначала выбирает данные путем индексации с синтаксисом [], затем отвязывает имя df с исходным кадром данных и связывает его с новым (т. Е. df[['b','c']]).

0 голосов
/ 04 июля 2018

Рекомендованный способ удаления столбца или строки в кадрах данных pandas - drop.

Чтобы удалить столбец,

df.drop('column_name', axis=1, inplace=True)

Чтобы удалить строку,

df.drop('row_index', axis=0, inplace=True)

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

0 голосов
/ 04 июля 2018

На мой взгляд, лучше всего использовать вариант 2. и 3., потому что сначала есть ограничения - вы можете удалить только один столбец, а не может использовать точечную запись - del df.a.

3.solution не удаляет, а выбирает и piRSquared создает хороший ответ для нескольких возможных решений с одной и той же идеей.

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