2013-02-20 35 views
28

tôi cần phải loại bỏ tất cả các hàng trong đó các yếu tố từ cột 3 trở đi đều NaNLàm thế nào để loại bỏ các hàng với giá trị null từ cột thứ k trở đi trong python

df = DataFrame(np.random.randn(6, 5), index=['a', 'c', 'e', 'f', 'g','h'], columns=['one', 'two', 'three', 'four', 'five']) 

df2 = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) 
df2.ix[1][0] = 111 
df2.ix[1][1] = 222 

Trong ví dụ trên, khung dữ liệu cuối cùng của tôi sẽ không có các hàng 'b' và 'c'.

Cách sử dụng df.dropna() trong trường hợp này?

Trả lời

62

Bạn có thể gọi dropna với đối số subsethow:

df2.dropna(subset=['three', 'four', 'five'], how='all') 

Như tên cho thấy:

  • how='all' đòi hỏi mỗi cột (của subset) ở hàng là NaN để có bị bỏ, trái ngược với mặc định 'any'.
  • subset là các cột cần kiểm tra cho NaN s.

Như @PaulH điểm ra, chúng ta có thể khái quát để thả các k cột cuối cùng với:

subset=df2.columns[-k:] 

Trên thực tế, chúng tôi thậm chí có thể làm điều gì đó phức tạp hơn nếu muốn:

subset=filter(lambda x: len(x) > 3, df2.columns) 
+12

lẽ 'df2 .dropna (tập hợp con = df2.columns [k:], how = 'all') '? (chỉ để được tổng quát hơn) –

+0

@Cảm ơn Paul. Đây là những gì tôi đang tìm kiếm – user1140126

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