ฉันเข้าใจว่าการวางคอลัมน์คุณใช้ 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
ถูกใช้เพื่อทำการเปลี่ยนแปลงใน dataframe ตัวเองโดยไม่ต้องทำคอลัมน์วางลงบนสำเนาของ data frame หากคุณต้องการรักษาสภาพเดิมเอาไว้ใช้:
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')
คุณต้องระบุคอลัมน์ตามตำแหน่งใน dataframe ตัวอย่างเช่นหากคุณต้องการวาง (คอลัมน์) หมายเลข 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)
เนื่องจากอาจมีหลายคอลัมน์ที่มีชื่อเดียวกันเราควรเปลี่ยนชื่อคอลัมน์ก่อน นี่คือรหัสสำหรับการแก้ปัญหา
df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns