Xóa cột khỏi DataFrame


1331

Khi xóa một cột trong DataFrame tôi sử dụng:

del df['column_name']

Và điều này làm việc tuyệt vời. Tại sao tôi không thể sử dụng những điều sau đây?

del df.column_name

Vì có thể truy cập cột / Sê-ri như df.column_name, tôi mong đợi nó hoạt động.


2
Lưu ý câu hỏi này đang được thảo luận trên Meta .
RM

Câu trả lời:


860

Như bạn đã đoán, cú pháp đúng là

del df['column_name']

Thật khó để thực hiện del df.column_namecông việc đơn giản là kết quả của các giới hạn cú pháp trong Python. del df[name]được dịch sang df.__delitem__(name)dưới vỏ bọc bởi Python.


25
Tôi nhận ra đây là một "câu trả lời" siêu cũ, nhưng sự tò mò của tôi bị khơi dậy - tại sao đó lại là một giới hạn cú pháp của Python? class A(object): def __init__(self): self.var = 1thiết lập một lớp, sau đó a = A(); del a.varhoạt động tốt ...
dwanderson

14
@dwanderson sự khác biệt là khi một cột bị xóa, DataFrame cần phải có cách xử lý riêng cho "cách thực hiện". Trong trường hợp del df[name], nó được dịch sang df.__delitem__(name)một phương thức mà DataFrame có thể thực hiện và sửa đổi theo nhu cầu của nó. Trong trường hợp del df.name, biến thành viên sẽ bị xóa mà không có cơ hội cho bất kỳ mã tùy chỉnh nào đang chạy. Xem xét ví dụ của riêng bạn - bạn có thể nhận được del a.varkết quả là in "xóa biến" không? Nếu bạn có thể, xin vui lòng cho tôi biết làm thế nào. Tôi không thể :)
Yonatan

8
@Yonatan Bạn có thể sử dụng một trong hai docs.python.org/3/reference/datamodel.html#object.__delattr__ hoặc mô tả cho rằng: docs.python.org/3/howto/descriptor.html
Eugene Pakhomov

5
Nhận xét của @Yonatan Eugene cũng áp dụng cho Python 2; các mô tả đã có trong Python 2 kể từ 2.2 và thật đơn giản để đáp ứng yêu cầu của bạn;)
CS

1
Câu trả lời này không thực sự chính xác - các pandasnhà phát triển đã không , nhưng điều đó không có nghĩa là khó thực hiện.
wizzwizz4

2185

Cách tốt nhất để làm điều này trong gấu trúc là sử dụng drop:

df = df.drop('column_name', 1)

nơi 1trục số ( 0cho các hàng và 1các cột.)

Để xóa cột mà không phải gán lại, dfbạn có thể làm:

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

Cuối cùng, để giảm theo số cột thay vì theo nhãn cột , hãy thử điều này để xóa, ví dụ: cột 1, 2 và 4:

df = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 

Cũng làm việc với cú pháp "văn bản" cho các cột:

df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)

79
Đây có phải là đề nghị trên delvì một số lý do?
râu

20
Mặc dù phương pháp xóa này có giá trị của nó, câu trả lời này không thực sự trả lời câu hỏi đang được hỏi.
Paul

109
Đúng @Paul, nhưng do tiêu đề của câu hỏi, hầu hết mọi người đến đây sẽ làm như vậy thông qua việc cố gắng tìm cách xóa một cột.
LondonRob

24
@beardc một lợi thế của droptrên deldropcho phép bạn thả nhiều cột cùng một lúc, thực hiện các hoạt động inplace hay không, và hồ sơ cũng xóa dọc theo bất kỳ trục (đặc biệt hữu ích cho một ma trận 3-D hay Panel)
Hobs

8
Một ưu điểm khác của droptrên delthả là một phần của API gấu trúc và chứa tài liệu.
modulitos

242

Sử dụng:

columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)

Điều này sẽ xóa một hoặc nhiều cột tại chỗ. Lưu ý rằng inplace=Trueđã được thêm vào trong pandas v0.13 và sẽ không hoạt động trên các phiên bản cũ hơn. Bạn sẽ phải gán lại kết quả trong trường hợp đó:

df = df.drop(columns, axis=1)

3
Một lưu ý về câu trả lời này: nếu một 'danh sách' được sử dụng, nên bỏ dấu ngoặc vuông:df.drop(list,inplace=True,axis=1)
edesz

1
đây thực sự nên là câu trả lời được chấp nhận, bởi vì nó cho thấy rõ tính ưu việt của phương pháp này del- có thể bỏ nhiều hơn một cột cùng một lúc.
dbliss

111

Thả theo chỉ số

Xóa các cột đầu tiên, thứ hai và thứ tư:

df.drop(df.columns[[0,1,3]], axis=1, inplace=True)

Xóa cột đầu tiên:

df.drop(df.columns[[0]], axis=1, inplace=True)

Có một tham số tùy chọn inplaceđể dữ liệu gốc có thể được sửa đổi mà không cần tạo bản sao.

Xuất hiện

Chọn cột, thêm, xóa

Xóa cột column-name:

df.pop('column-name')

Ví dụ:

df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])

print df:

   one  two  three
A    1    2      3
B    4    5      6
C    7    8      9

df.drop(df.columns[[0]], axis=1, inplace=True) print df:

   two  three
A    2      3
B    5      6
C    8      9

three = df.pop('three') print df:

   two
A    2
B    5
C    8

1
Làm thế nào tôi có thể bật một hàng trong gấu trúc?
Kennet Celeste

2
@Yugi Bạn có thể sử dụng một khung dữ liệu được chuyển đổi cho điều đó. ví dụ - df.T.pop('A')
Slave Đồng hồ

@ClockSlave Điều đó không sửa đổi bản gốc df. Bạn có thể làm df = df.T; df.pop(index); df = df.Tnhưng điều này có vẻ quá mức.
cs95

Thay vì df.drop(df.columns[[0]], axis=1, inplace=True)nó sẽ không đủ để sử dụng df.drop([0], axis=1)?
Anirban Mukherjee

1
@Anirban Mukherjee Nó phụ thuộc. Nếu muốn xóa tên cột 0, sau đó df.drop(0, axis=1)làm việc tốt. Nhưng nếu không biết tên cột và cần xóa cột đầu tiên thì cần df.drop(df.columns[[0]], axis=1, inplace=True), nó chọn cột đầu tiên theo vị trí và thả nó.
jezrael

71

Câu hỏi thực tế được đặt ra, bị bỏ qua bởi hầu hết các câu trả lời ở đây là:

Tại sao tôi không thể sử dụng del df.column_name?

Đầu tiên chúng ta cần hiểu vấn đề, đòi hỏi chúng ta phải đi sâu vào các phương pháp ma thuật trăn .

Như Wes chỉ ra trong câu trả lời của mình del df['column']ánh xạ tới phương pháp ma thuật trăn df.__delitem__('column')được thực hiện trong gấu trúc để thả cột

Tuy nhiên, như được chỉ ra trong liên kết ở trên về phương pháp ma thuật trăn :

Trong thực tế, __del__hầu như không bao giờ nên được sử dụng vì các trường hợp bấp bênh mà theo đó nó được gọi là; sử dụng nó một cách thận trọng!

Bạn có thể lập luận rằng del df['column_name']không nên được sử dụng hoặc khuyến khích, và do đó del df.column_namethậm chí không nên được xem xét.

Tuy nhiên, về mặt lý thuyết, del df.column_namecó thể được implemeted để làm việc trong gấu trúc sử dụng các phương pháp kỳ diệu__delattr__ . Tuy nhiên, điều này không giới thiệu một số vấn đề nhất định, những vấn đề mà việc del df['column_name']triển khai đã có, nhưng ở mức độ thấp hơn.

Vấn đề mẫu

Điều gì xảy ra nếu tôi xác định một cột trong khung dữ liệu được gọi là "dtypes" hoặc "cột".

Sau đó giả sử tôi muốn xóa các cột này.

del df.dtypessẽ làm cho __delattr__phương thức bị lẫn lộn như thể nó sẽ xóa thuộc tính "dtypes" hoặc cột "dtypes".

Câu hỏi kiến ​​trúc đằng sau vấn đề này

  1. Là một dataframe một tập hợp các cột ?
  2. Là một dataframe một tập hợp các hàng ?
  3. Là một cột một thuộc tính của một khung dữ liệu?

Gấu trúc trả lời:

  1. Vâng, bằng mọi cách
  2. Không, nhưng nếu bạn muốn nó được, bạn có thể sử dụng .ix, .lochoặc .ilocphương pháp.
  3. Có lẽ, bạn có muốn đọc dữ liệu? Sau đó, , trừ khi tên của thuộc tính đã được lấy bởi một thuộc tính khác thuộc về khung dữ liệu. Bạn có muốn sửa đổi dữ liệu? Vậy thì không .

TLDR;

Bạn không thể làm điều đó del df.column_namebởi vì gấu trúc có kiến ​​trúc khá phát triển cần được xem xét lại để loại bất đồng nhận thức này không xảy ra với người dùng.

Protip:

Đừng sử dụng df.column_name, Nó có thể đẹp, nhưng nó gây ra sự bất hòa về nhận thức

Zen of Python trích dẫn phù hợp ở đây:

Có nhiều cách để xóa một cột.

Nên có một-- và tốt nhất là chỉ có một cách rõ ràng để làm điều đó.

Cột đôi khi là thuộc tính nhưng đôi khi không.

Trường hợp đặc biệt không đủ đặc biệt để phá vỡ các quy tắc.

del df.dtypesxóa thuộc tính dtypes hoặc cột dtypes?

Trước sự mơ hồ, hãy từ chối sự cám dỗ để đoán.


"Trên thực tế, __del__hầu như không bao giờ nên được sử dụng vì các trường hợp bấp bênh theo đó nó được gọi là; sử dụng nó một cách thận trọng!" là hoàn toàn không liên quan ở đây, vì phương pháp đang được sử dụng ở đây là __delattr__.
pppery

1
@ppperry bạn đang bỏ lỡ trích dẫn. đó là delnội dung có nghĩa, không phải .__del__phương thức cá thể. Nội dung delđược ánh xạ tới __delattr____delitem__đó là những gì tôi đang xây dựng đối số của mình. Vì vậy, có lẽ bạn muốn đọc lại những gì tôi đã viết.
Firelynx

1
__... __được đánh dấu là đánh dấu đậm bằng StackExchange
pppery

2
"Đừng sử dụng df.column_name, Nó có thể đẹp, nhưng nó gây ra sự bất hòa về nhận thức" Điều này có nghĩa là gì? Tôi không phải là một nhà tâm lý học vì vậy tôi phải tìm kiếm điều này để hiểu ý của bạn. Ngoài ra, trích dẫn Thiền là vô nghĩa vì có hàng trăm cách hợp lệ để làm điều tương tự trong gấu trúc.
cs95

58

Một bổ sung tốt đẹp là khả năng thả cột chỉ khi chúng tồn tại . Bằng cách này, bạn có thể bao quát nhiều trường hợp sử dụng hơn và nó sẽ chỉ thả các cột hiện có từ các nhãn được truyền cho nó:

Chỉ cần thêm lỗi = 'bỏ qua' , ví dụ:

df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
  • Đây là điểm mới từ gấu trúc 0.16.1 trở đi. Tài liệu ở đây .

41

từ phiên bản 0.16.1 bạn có thể làm

df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')

3
Và điều này cũng hỗ trợ bỏ nhiều cột, một số cột không cần tồn tại (nghĩa là không tăng lỗi errors= 'ignore') df.drop(['column_1','column_2'], axis=1 , inplace=True,errors= 'ignore'), nếu ứng dụng đó mong muốn!
muon

31

Đó là thực hành tốt để luôn luôn sử dụng []ký hiệu. Một lý do là ký hiệu thuộc tính ( df.column_name) không hoạt động đối với các chỉ số được đánh số:

In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])

In [2]: df[1]
Out[2]:
0    2
1    5
Name: 1

In [3]: df.1
  File "<ipython-input-3-e4803c0d1066>", line 1
    df.1
       ^
SyntaxError: invalid syntax

26

Gấu trúc 0,21+ câu trả lời

Pandas phiên bản 0.21 đã thay đổi dropphương thức một chút để bao gồm cả tham số indexcolumnstham số để khớp với chữ ký của phương thức renamereindex.

df.drop(columns=['column_a', 'column_c'])

Cá nhân, tôi thích sử dụng axistham số để biểu thị các cột hoặc chỉ mục vì đó là tham số từ khóa chiếm ưu thế được sử dụng trong gần như tất cả các phương thức gấu trúc. Nhưng, bây giờ bạn có một số lựa chọn bổ sung trong phiên bản 0.21.


1
df.drop (['cột_a', 'cột_c'], trục = 1) | nó đang làm việc cho tôi bây giờ
YouAreAwgie

21

Trong gấu trúc 0.16.1+, bạn chỉ có thể thả các cột nếu chúng tồn tại trên mỗi giải pháp được đăng bởi @eiTanLaVi. Trước phiên bản đó, bạn có thể đạt được kết quả tương tự thông qua việc hiểu danh sách có điều kiện:

df.drop([col for col in ['col_name_1','col_name_2',...,'col_name_N'] if col in df], 
        axis=1, inplace=True)

14

TL; DR

Rất nhiều nỗ lực để tìm một giải pháp hiệu quả hơn một chút. Khó để biện minh cho sự phức tạp thêm vào trong khi hy sinh sự đơn giản củadf.drop(dlst, 1, errors='ignore')

df.reindex_axis(np.setdiff1d(df.columns.values, dlst), 1)

Lời nói đầu
Xóa một cột về mặt ngữ nghĩa giống như chọn các cột khác. Tôi sẽ chỉ ra một vài phương pháp bổ sung để xem xét.

Tôi cũng sẽ tập trung vào giải pháp chung là xóa nhiều cột cùng một lúc và cho phép thử xóa các cột không có mặt.

Sử dụng các giải pháp này là chung và sẽ làm việc cho trường hợp đơn giản là tốt.


Thiết lập
Xem xét pd.DataFrame dfvà danh sách để xóadlst

df = pd.DataFrame(dict(zip('ABCDEFGHIJ', range(1, 11))), range(3))
dlst = list('HIJKLM')

df

   A  B  C  D  E  F  G  H  I   J
0  1  2  3  4  5  6  7  8  9  10
1  1  2  3  4  5  6  7  8  9  10
2  1  2  3  4  5  6  7  8  9  10

dlst

['H', 'I', 'J', 'K', 'L', 'M']

Kết quả sẽ giống như:

df.drop(dlst, 1, errors='ignore')

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

Vì tôi đánh đồng việc xóa một cột để chọn các cột khác, tôi sẽ chia nó thành hai loại:

  1. Lựa chọn nhãn
  2. Lựa chọn Boolean

Lựa chọn nhãn

Chúng tôi bắt đầu bằng cách sản xuất danh sách / mảng nhãn đại diện cho các cột chúng tôi muốn giữ và không có các cột chúng tôi muốn xóa.

  1. df.columns.difference(dlst)

    Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
  2. np.setdiff1d(df.columns.values, dlst)

    array(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype=object)
  3. df.columns.drop(dlst, errors='ignore')

    Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
  4. list(set(df.columns.values.tolist()).difference(dlst))

    # does not preserve order
    ['E', 'D', 'B', 'F', 'G', 'A', 'C']
  5. [x for x in df.columns.values.tolist() if x not in dlst]

    ['A', 'B', 'C', 'D', 'E', 'F', 'G']

Các cột từ Nhãn
Để so sánh quá trình lựa chọn, giả sử:

 cols = [x for x in df.columns.values.tolist() if x not in dlst]

Sau đó chúng ta có thể đánh giá

  1. df.loc[:, cols]
  2. df[cols]
  3. df.reindex(columns=cols)
  4. df.reindex_axis(cols, 1)

Mà tất cả đánh giá để:

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

Lát Boolean

Chúng ta có thể xây dựng một mảng / danh sách các booleans để cắt

  1. ~df.columns.isin(dlst)
  2. ~np.in1d(df.columns.values, dlst)
  3. [x not in dlst for x in df.columns.values.tolist()]
  4. (df.columns.values[:, None] != dlst).all(1)

Cột từ Boolean
để so sánh

bools = [x not in dlst for x in df.columns.values.tolist()]
  1. df.loc[: bools]

Mà tất cả đánh giá để:

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

Thời gian mạnh mẽ

Chức năng

setdiff1d = lambda df, dlst: np.setdiff1d(df.columns.values, dlst)
difference = lambda df, dlst: df.columns.difference(dlst)
columndrop = lambda df, dlst: df.columns.drop(dlst, errors='ignore')
setdifflst = lambda df, dlst: list(set(df.columns.values.tolist()).difference(dlst))
comprehension = lambda df, dlst: [x for x in df.columns.values.tolist() if x not in dlst]

loc = lambda df, cols: df.loc[:, cols]
slc = lambda df, cols: df[cols]
ridx = lambda df, cols: df.reindex(columns=cols)
ridxa = lambda df, cols: df.reindex_axis(cols, 1)

isin = lambda df, dlst: ~df.columns.isin(dlst)
in1d = lambda df, dlst: ~np.in1d(df.columns.values, dlst)
comp = lambda df, dlst: [x not in dlst for x in df.columns.values.tolist()]
brod = lambda df, dlst: (df.columns.values[:, None] != dlst).all(1)

Kiểm tra

res1 = pd.DataFrame(
    index=pd.MultiIndex.from_product([
        'loc slc ridx ridxa'.split(),
        'setdiff1d difference columndrop setdifflst comprehension'.split(),
    ], names=['Select', 'Label']),
    columns=[10, 30, 100, 300, 1000],
    dtype=float
)

res2 = pd.DataFrame(
    index=pd.MultiIndex.from_product([
        'loc'.split(),
        'isin in1d comp brod'.split(),
    ], names=['Select', 'Label']),
    columns=[10, 30, 100, 300, 1000],
    dtype=float
)

res = res1.append(res2).sort_index()

dres = pd.Series(index=res.columns, name='drop')

for j in res.columns:
    dlst = list(range(j))
    cols = list(range(j // 2, j + j // 2))
    d = pd.DataFrame(1, range(10), cols)
    dres.at[j] = timeit('d.drop(dlst, 1, errors="ignore")', 'from __main__ import d, dlst', number=100)
    for s, l in res.index:
        stmt = '{}(d, {}(d, dlst))'.format(s, l)
        setp = 'from __main__ import d, dlst, {}, {}'.format(s, l)
        res.at[(s, l), j] = timeit(stmt, setp, number=100)

rs = res / dres

rs

                          10        30        100       300        1000
Select Label                                                           
loc    brod           0.747373  0.861979  0.891144  1.284235   3.872157
       columndrop     1.193983  1.292843  1.396841  1.484429   1.335733
       comp           0.802036  0.732326  1.149397  3.473283  25.565922
       comprehension  1.463503  1.568395  1.866441  4.421639  26.552276
       difference     1.413010  1.460863  1.587594  1.568571   1.569735
       in1d           0.818502  0.844374  0.994093  1.042360   1.076255
       isin           1.008874  0.879706  1.021712  1.001119   0.964327
       setdiff1d      1.352828  1.274061  1.483380  1.459986   1.466575
       setdifflst     1.233332  1.444521  1.714199  1.797241   1.876425
ridx   columndrop     0.903013  0.832814  0.949234  0.976366   0.982888
       comprehension  0.777445  0.827151  1.108028  3.473164  25.528879
       difference     1.086859  1.081396  1.293132  1.173044   1.237613
       setdiff1d      0.946009  0.873169  0.900185  0.908194   1.036124
       setdifflst     0.732964  0.823218  0.819748  0.990315   1.050910
ridxa  columndrop     0.835254  0.774701  0.907105  0.908006   0.932754
       comprehension  0.697749  0.762556  1.215225  3.510226  25.041832
       difference     1.055099  1.010208  1.122005  1.119575   1.383065
       setdiff1d      0.760716  0.725386  0.849949  0.879425   0.946460
       setdifflst     0.710008  0.668108  0.778060  0.871766   0.939537
slc    columndrop     1.268191  1.521264  2.646687  1.919423   1.981091
       comprehension  0.856893  0.870365  1.290730  3.564219  26.208937
       difference     1.470095  1.747211  2.886581  2.254690   2.050536
       setdiff1d      1.098427  1.133476  1.466029  2.045965   3.123452
       setdifflst     0.833700  0.846652  1.013061  1.110352   1.287831

fig, axes = plt.subplots(2, 2, figsize=(8, 6), sharey=True)
for i, (n, g) in enumerate([(n, g.xs(n)) for n, g in rs.groupby('Select')]):
    ax = axes[i // 2, i % 2]
    g.plot.bar(ax=ax, title=n)
    ax.legend_.remove()
fig.tight_layout()

Điều này liên quan đến thời gian cần thiết để chạy df.drop(dlst, 1, errors='ignore'). Có vẻ như sau tất cả nỗ lực đó, chúng tôi chỉ cải thiện hiệu suất một cách khiêm tốn.

nhập mô tả hình ảnh ở đây

Nếu thực tế các giải pháp tốt nhất sử dụng reindexhoặc reindex_axistrên hack list(set(df.columns.values.tolist()).difference(dlst)). Một thứ hai gần và vẫn còn rất tốt hơn dropnp.setdiff1d.

rs.idxmin().pipe(
    lambda x: pd.DataFrame(
        dict(idx=x.values, val=rs.lookup(x.values, x.index)),
        x.index
    )
)

                      idx       val
10     (ridx, setdifflst)  0.653431
30    (ridxa, setdifflst)  0.746143
100   (ridxa, setdifflst)  0.816207
300    (ridx, setdifflst)  0.780157
1000  (ridxa, setdifflst)  0.861622

2

Cú pháp dấu chấm hoạt động trong JavaScript, nhưng không phải bằng Python.

  • Con trăn del df['column_name']
  • JavaScript: del df['column_name'] hoặc del df.column_name

2

Nếu khung dữ liệu ban đầu của bạn dfkhông quá lớn, bạn không bị hạn chế về bộ nhớ và bạn chỉ cần giữ một vài cột thì bạn cũng có thể tạo một khung dữ liệu mới chỉ với các cột bạn cần:

new_df = df[['spam', 'sausage']]

2

Chúng ta có thể Xóa hoặc Xóa một cột được chỉ định hoặc các cột được chỉ định bằng phương thức drop () .

Giả sử df là một khung dữ liệu.

Cột cần xóa = cột0

Mã số:

df = df.drop(column0, axis=1)

Để xóa nhiều cột col1, col2 ,. . . , coln, chúng ta phải chèn tất cả các cột cần xóa trong danh sách. Sau đó loại bỏ chúng bằng phương thức drop ().

Mã số:

df = df.drop([col1, col2, . . . , coln], axis=1)

Tôi hy vọng nó sẽ hữu ích.


df = df.drop([col1, col2, . . . , coln], axis=1)điều này không hoạt động nếu tôi chỉ định một tên biến thay cho col1, col2, v.v. Tôi nhận được cột lỗi không nằm trong trục khi nó chắc chắn xuất hiện. @Littin Bạn có thể giúp gì không?
RSM

1

Một cách khác để xóa một cột trong Pandas DataFrame

nếu bạn không tìm cách xóa In-Place thì bạn có thể tạo DataFrame mới bằng cách chỉ định các cột bằng DataFrame(...)hàm như

my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}

df = pd.DataFrame(my_dict)

Tạo một DataFrame mới như

newdf = pd.DataFrame(df, columns=['name', 'age'])

Bạn nhận được một kết quả tốt như những gì bạn nhận được với del / drop


1
Điều này đúng về mặt kỹ thuật nhưng có vẻ ngớ ngẩn khi phải liệt kê từng cột để giữ thay vì chỉ một (hoặc vài) cột bạn muốn xóa.
cs95
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.