[英]python dataframe pandas drop column using int
我知道要刪除列,請使用 df.drop('column name', axis=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)
如果有多個具有相同名稱的列,那么到目前為止給出的解決方案將刪除所有列,這可能不是人們正在尋找的。 如果試圖刪除除一個實例之外的重復列,則可能會出現這種情況。 下面的例子闡明了這種情況:
# 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 = 行。
您可以簡單地將columns
參數提供給df.drop
命令,這樣您就不必在這種情況下指定axis
,就像這樣
columns_list = [1, 2, 4] # index numbers of columns you want to delete
df = df.drop(columns=df.columns[columns_list])
如需參考,請參閱此處的columns
參數: https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html?highlight=drop#pandas.DataFrame.drop
如果你真的想用整數來做(但為什么?),那么你可以建立一個字典。
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)
獲取所需列的好方法(與重復名稱無關)。
例如,您將要刪除的列索引包含在類似列表的變量中
unnecessary_cols = [1, 4, 5, 6]
那么
import numpy as np
df.iloc[:, np.setdiff1d(np.arange(len(df.columns)), unnecessary_cols)]
由於可以有多個具有相同名稱的列,我們應該首先重命名這些列。 這是解決方案的代碼。
df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.