2012-10-04 56 views
29

Trong ứng dụng của tôi, tôi tải tập tin văn bản được cấu trúc như sau:Drop cột không phải số từ một DataFrame gấu trúc

  • Đầu tiên không cột số (ID)
  • Một số cột không phải số (chuỗi)
  • Một số cột số (phao)

Số lượng cột không phải là số thay đổi. Hiện nay tôi nạp dữ liệu vào một DataFrame như thế này:

source = pandas.read_table(inputfile, index_col=0) 

Tôi muốn thả tất cả các cột không phải số trong một ngã swoop, mà không biết tên hoặc chỉ số của họ, vì đây có thể là doable đọc dtype của họ. Điều này có thể xảy ra với gấu trúc hay tôi phải tự mình nấu món gì đó?

+0

liên quan: http://stackoverflow.com/q/25039626/5069869 – TheEspinosa

Trả lời

24

Để tránh sử dụng một phương pháp riêng bạn cũng có thể sử dụng select_dtypes, nơi bạn có thể bao gồm hoặc loại trừ dtypes bạn muốn.

Chạy vào nó trên this post trên cùng một điều.

Hoặc trong trường hợp của bạn, cụ thể:
source.select_dtypes(['number']) or source.select_dtypes([np.number]

+1

Tôi nghĩ rằng điều này là tốt hơn so với sử dụng phương pháp riêng tư. Có lẽ bạn nên thêm câu trả lời trực tiếp cho câu hỏi, đó là: source.select_dtypes (['number']) hoặc source.select_dtypes ([numpy.number]) – hardsetting

+0

Đây phải là câu trả lời được chấp nhận, mặc dù câu trả lời khác cũng sẽ hoạt động , điều này là chính xác hơn, chưa kể rằng phương pháp riêng tư, không phải là một phần của api, có thể thay đổi bất cứ lúc nào –

+0

Điều này không trả về boolean? Ngoài ra, sự khác nhau giữa 'số' và np.number (chỉ là một mảng số lượng?) – Worthy7

29

It `s một phương pháp riêng, nhưng nó sẽ làm các trick: source._get_numeric_data()

In [2]: import pandas as pd 

In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]}) 

In [4]: source 
Out[4]: 
    A B  C 
0 foo 1 (1, 2) 
1 bar 2 (3, 4) 

In [5]: source._get_numeric_data() 
Out[5]: 
    B 
0 1 
1 2 
+0

Cảm ơn, hoạt động khá độc đáo. – Einar

+0

Cảm ơn! Có biện pháp phòng ngừa nào trong việc sử dụng "phương pháp riêng" trong gấu trúc không? Hoặc, cách khác, tại sao điều này là riêng tư? (Tôi có thể mở một câu hỏi mới, nếu bạn đề nghị.) –

+0

Nói chung việc thêm/xóa/thay đổi-api của một phương thức riêng không được xem là thay đổi hành vi api/hành vi (lớp). Nói cách khác, một phiên bản mới của gấu trúc được coi là tương thích ngược có thể, ví dụ: xóa phương thức riêng. Tôi tin rằng _get_numeric_data() chủ yếu được sử dụng để hỗ trợ các chức năng vẽ/phương thức. Nếu bạn cảm thấy đây là một phương pháp hữu ích, bạn có thể làm một yêu cầu tính năng trên github yêu cầu để làm cho nó một phần của api công cộng. –

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