Я розумію, що для скидання стовпця ви використовуєте df.drop ('ім'я стовпця', ось = 1). Чи є спосіб скинути стовпчик, використовуючи числовий індекс замість назви стовпця?
Я розумію, що для скидання стовпця ви використовуєте df.drop ('ім'я стовпця', ось = 1). Чи є спосіб скинути стовпчик, використовуючи числовий індекс замість назви стовпця?
Відповіді:
Ви можете видалити стовпчик з i
індексу так:
df.drop(df.columns[i], axis=1)
Це може спрацювати дивно, якщо у вас є дублікати імен у стовпцях, тому для цього ви можете перейменувати стовпець, який ви хочете видалити, на новий ім'я. Або ви можете перепризначити DataFrame так:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
Видаліть кілька таких стовпців:
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)
inplace=True
цим, вам доведеться це зробити, df = df.drop()
якщо ви хочете побачити зміну в df
собі.
Якщо є кілька стовпців з однаковими іменами, рішення, наведені тут, видалять усі стовпці, що може бути не тим, що потрібно шукати. Це може бути, якщо ви намагаєтесь видалити повторювані стовпці, крім одного екземпляра. Приклад нижче пояснює цю ситуацію:
# 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
Як бачимо, обидва стовпці Xs були скинуті. Альтернативне рішення:
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-й стовпчик (перший 'x').
Потрібно визначити стовпці, виходячи з їхнього положення у фреймі даних. Наприклад, якщо ви хочете випустити (del) стовпці номер 2,3 і 5, це буде,
df.drop(df.columns[[2,3,5]], axis = 1)
Якщо у вас є два стовпчики з однаковою назвою. Один простий спосіб - перейменувати стовпці вручну так: -
df.columns = ['column1', 'column2', 'column3']
Тоді ви можете перейти через індекс стовпців, як ви просили, наприклад:
df.drop(df.columns[1], axis=1, inplace=True)
df.column[1]
знизиться індекс 1.
Запам’ятайте вісь 1 = стовпці та вісь 0 = рядки.
якщо ви дійсно хочете зробити це з цілими числами (але чому?), тоді ви можете створити словник.
col_dict = {x: col for x, col in enumerate(df.columns)}
тоді df = df.drop(col_dict[0], 1)
працюватиме за бажанням
редагувати: ви можете помістити його у функцію, яка робить це для вас, хоча таким чином він створює словник кожен раз, коли ви його називаєте
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)
Ви можете використовувати наступний рядок, щоб скинути перші два стовпці (або будь-який стовпець, який вам не потрібен):
df.drop([df.columns[0], df.columns[1]], axis=1)