2013-08-21 9 views
7

Tôi có khung dữ liệu gấu trúc được tạo từ tệp csv. Một cột của khung dữ liệu này chứa dữ liệu số ban đầu được truyền dưới dạng chuỗi. Hầu hết các mục nhập đều giống như số, nhưng một số có chứa các mã lỗi khác nhau không phải là số. Tôi không biết trước tất cả các mã lỗi có thể là bao nhiêu hoặc có bao nhiêu mã lỗi. Vì vậy, ví dụ, dataframe có thể trông giống như:có phương pháp nào để bỏ qua các hàng không chuyển đổi khi đúc một chuỗi gấu trúc từ str sang phao không?

[In 1]: df 
[Out 1]: 
      data  OtherAttr 
MyIndex 
0   1.4  aaa 
1   error1  foo 
2   2.2  bar 
3   0.8  bar 
4   xxx  bbb 
... 
743733  BadData ccc 
743734  7.1  foo 

Tôi muốn đúc df.data như một phao và vứt bỏ bất kỳ giá trị mà không chuyển đổi đúng cách. Có chức năng tích hợp cho điều này không? Một cái gì đó như:

df.data = df.data.astype(float, skipbad = True) 

(Mặc dù tôi biết rằng đặc biệt sẽ không làm việc và tôi không thấy bất kỳ kwargs trong astype mà làm những gì tôi muốn)

Tôi đoán tôi có thể viết một hàm sử dụng try và sau đó sử dụng gấu trúc apply hoặc map, nhưng điều đó có vẻ giống như một giải pháp không phù hợp. Đây phải là một vấn đề khá phổ biến, phải không?

Trả lời

3

Sử dụng convert_objects phương pháp mà "nỗ lực để suy ra dtype tốt hơn cho cột đối tượng":

In [11]: df['data'].convert_objects(convert_numeric=True) 
Out[11]: 
0 1.4 
1 NaN 
2 2.2 
3 0.8 
4 NaN 
Name: data, dtype: float64 

Trong thực tế, bạn có thể áp dụng điều này cho toàn bộ DataFrame:

In [12]: df.convert_objects(convert_numeric=True) 
Out[12]: 
     data OtherAttr 
MyIndex     
0   1.4  aaa 
1   NaN  foo 
2   2.2  bar 
3   0.8  bar 
4   NaN  bbb 
+1

Cảm ơn cho câu trả lời, Chỉ cần những gì tôi đang tìm kiếm. Một điểm tiếp theo nhỏ: nếu bạn có một kết hợp các kiểu đã có trong một cột (một số float, một số chuỗi) thì 'convert_objects' sẽ thất bại âm thầm. Tất nhiên, phản ứng hợp lý với điều đó là "không có sự pha trộn các loại đối tượng trong một cột!" – user2543645

+1

_ "FutureWarning: convert_objects không được dùng nữa. Sử dụng trình chuyển đổi cụ thể kiểu dữ liệu pd.to_datetime, pd.to_timedelta và pd.to_numeric." _ – xtian