python dataframe pandas drop column, используя int
Я понимаю, что для удаления столбца используется df.drop('column name', axis = 1). Есть ли способ удалить столбец с помощью числового индекса вместо имени столбца?
Ответы
Ответ 1
Вы можете удалить столбец в индексе i
следующим образом:
df.drop(df.columns[i], axis=1)
Это может работать странно, если у вас есть дубликаты имен в столбцах, поэтому для этого вы можете переименовать столбец, который хотите удалить столбец по новому имени. Или вы можете переназначить DataFrame следующим образом:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
Ответ 2
Удалите несколько столбцов, как это:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
inplace=True
используется для внесения изменений в сам фрейм данных, не выполняя изменение столбца в копии фрейма данных. Если вам нужно сохранить оригинал, используйте:
df_after_dropping = df.drop(df.columns[cols],axis=1)
Ответ 3
Если имеется несколько столбцов с одинаковыми именами, приведенные здесь решения удалят все столбцы, которые могут не соответствовать тому, что нужно искать. Это может иметь место, если кто-то пытается удалить дубликаты столбцов, кроме одного экземпляра. Пример ниже проясняет эту ситуацию:
# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y'])
df
Out[495]:
x x y
0 0 0 6
1 1 1 7
2 2 2 8
3 3 3 9
4 4 4 10
# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis = 1)
y
0 6
1 7
2 8
3 9
4 10
Как видите, оба столбца X были удалены. Альтернативное решение:
column_numbers = [x for x in range(df.shape[1])] # list of columns' integer indices
column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column
x y
0 0 6
1 1 7
2 2 8
3 3 9
4 4 10
Как видите, это действительно удаляет только 0-й столбец (первый "х").
Ответ 4
если вы действительно хотите сделать это с помощью целых чисел (но почему?), тогда вы можете создать словарь.
col_dict = {x: col for x, col in enumerate(df.columns)}
то df = df.drop(col_dict[0], 1)
будет работать по желанию
edit: вы можете поместить его в функцию, которая делает это для вас, хотя таким образом он создает словарь каждый раз, когда вы его вызываете
def drop_col_n(df, col_n_to_drop):
col_dict = {x: col for x, col in enumerate(df.columns)}
return df.drop(col_dict[col_n_to_drop], 1)
df = drop_col_n(df, 2)
Ответ 5
Вам нужно идентифицировать столбцы на основе их положения в кадре данных. Например, если вы хотите удалить (del) столбец № 2,3 и 5, это будет,
df.drop(df.columns[[2,3,5]], axis = 1)
Ответ 6
Поскольку может быть несколько столбцов с одинаковым именем, мы должны сначала переименовать столбцы. Вот код для решения.
df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
Ответ 7
Вы можете использовать следующую строку, чтобы удалить первые два столбца (или любой столбец, который вам не нужен):
df.drop([df.columns[0], df.columns[1]], axis=1)
Ссылка