2015-01-20 37 views
25

tôi đọc dữ liệu của tôiLàm cách nào để xóa một cột khỏi khung dữ liệu bằng gấu trúc?

import pandas as pd 
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t') 
print df 

và nhận được:

  id text 
0 361.273 text1... 
1 374.350 text2... 
2 374.350 text3... 

Làm thế nào tôi có thể xóa các id cột từ khung dữ liệu trên ?. Tôi thử như sau:

import pandas as pd 
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t') 
print df.drop('id', 1) 

Nhưng nó làm tăng ngoại lệ này:

ValueError: labels ['id'] not contained in axis 
+2

Báo cáo 'df.columns' là tên cột là gì? Có lẽ có một không gian trong tên cột? – unutbu

+0

'Chỉ mục ([u'id ý kiến ​​'], dtype =' đối tượng ')' Cảm ơn bạn đã trả lời – newWithPython

+1

Một điều cần lưu ý, bạn có thực sự cần xóa cột không? Bạn có thể chỉ chọn các cột quan tâm từ df bằng cách thực hiện 'df ['text']' hoặc thường là 'df [some_list]', bổ sung nếu bạn không bao giờ muốn nó ở vị trí đầu tiên thì không tải nó 'df = pd.read_csv ('/ path/file.tsv', header = 0, delimiter = '\ t', usecols = [0]) ' – EdChum

Trả lời

5

Để thực sự xóa cột

del df['id'] hoặc df.drop('id', 1) nên đã làm việc nếu cột thông qua phù hợp chính xác

Tuy nhiên, nếu bạn không cần phải xoá columnthen bạn chỉ có thể chọn cột của quan tâm như vậy:

In [54]: 

df['text'] 
Out[54]: 
0 text1 
1 text2 
2 textn 
Name: text, dtype: object 

Nếu bạn không bao giờ muốn nó ở nơi đầu tiên sau đó bạn vượt qua một danh sách các cols để read_csv như một param usecols:

In [53]: 
import io 
temp="""id text 
363.327 text1 
366.356 text2 
37782 textn""" 
df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text']) 
df 
Out[53]: 
    text 
0 text1 
1 text2 
2 textn 

Về lỗi của bạn đó là vì 'id' không có trong các cột của bạn hoặc rằng nó đánh vần khác nhau hoặc có khoảng trắng. Để kiểm tra cái nhìn này ở đầu ra từ print(df.columns.tolist()), điều này sẽ xuất ra một danh sách các cột và sẽ hiển thị nếu bạn có bất kỳ khoảng trắng đầu/cuối.

+0

Chăm sóc người giải quyết để giải thích? – EdChum

+8

Câu hỏi đặt ra là cách xóa một cột. Đây là một câu hỏi hợp lệ không được giải đáp trong câu trả lời này. Tôi không phải là người đi xuống. –

+1

@TimD ngữ cảnh của câu hỏi là OP muốn xóa một cột mà họ không quan tâm, câu trả lời của tôi cho thấy trước hết điều này là không cần thiết nếu bạn chỉ muốn sử dụng một cột cụ thể hoặc thực tế bạn không đọc cột đó hoặc chỉ đọc các cột quan tâm và OP chấp nhận câu trả lời – EdChum

51

df.drop(colname, axis=1) (hoặc del df[colname]) là phương pháp đúng để sử dụng để xóa một cột.

Nếu số ValueError được nêu lên, điều đó có nghĩa là tên cột không chính xác như bạn nghĩ.

Kiểm tra df.columns để xem những gì Pandas nghĩ là tên của các cột.

26

Cách tốt nhất để xóa một cột trong gấu trúc là sử dụng drop:

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

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

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

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

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

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


Exceptions:

Nếu một số cột sai hoặc nhãn được yêu cầu một lỗi sẽ được ném ra. Để kiểm tra số cột sử dụng df.shape[1] hoặc len(df.columns.values) và để kiểm tra nhãn cột, hãy sử dụng df.columns.values.

Một ngoại lệ sẽ được nêu ra câu trả lời dựa trên @ LondonRob's answer và để lại đây để giúp khách truy cập trong tương lai của trang này.

Các vấn đề liên quan