2014-10-01 45 views
15

Có cách nào để làm tròn một cột đơn trong gấu trúc mà không ảnh hưởng đến phần còn lại của khung dữ liệu không?làm tròn một cột đơn trong gấu trúc

df: 
     item value1 value2 
    0 a 1.12  1.3 
    1 a 1.50  2.5 
    2 a 0.10  0.0 
    3 b 3.30 -1.0 
    4 b 4.80 -1.0 

df.value1.apply (np.round) cho

0 1 
1 2 
2 0 
3 3 
4 5 
5 5 

là gì cách chính xác để làm cho dữ liệu giống như thế này:

item value1 value2 
0 a  1  1.3 
1 a  2  2.5 
2 a  0  0.0 
3 b  3 -1.0 
4 b  5 -1.0 
5 c  5  5.0 

Trả lời

22

Bạn đang rất gần. Bạn đã áp dụng vòng cho chuỗi giá trị được đưa ra bởi df.value1. Kiểu trả về là một Series. Bạn cần phải gán loạt lại cho rằng dataframe (hay cách khác dataframe với cùng Index)

Cũng có một phương pháp Series.round mà về cơ bản là một tay viết tắt của Series.apply(np.round)

In[2]: 
    df.value1 = df.value1.round() 
    print df 

Out[2]: 
    item value1 value2 
    0 a  1  1.3 
    1 a  2  2.5 
    2 a  0  0.0 
    3 b  3 -1.0 
    4 b  5 -1.0 
+1

Cảm ơn bạn. không cảm thấy rất tươi sáng vì thiếu điều này :) – k3it

+0

Gấu trúc không (ít nhất là với tôi) đến một cách tự nhiên. Tôi khá chắc chắn tôi đã làm việc ra làm thế nào để làm điều này sau khi đọc một câu trả lời SO tuần trước hay như vậy. nhưng tôi không thể tìm thấy nó một lần nữa để đánh dấu là trùng lặp vì vậy nó có thể là một câu hỏi hơi khác nhau. –

10

Đối với một số lý do vòng() phương pháp không hoạt động nếu bạn có số float với nhiều chữ số thập phân, nhưng điều này sẽ.

desred_decimals = 2  
df['column'] = df['column'].apply(lambda x: round(x,desred_decimals)) 
+2

df.column_name.round() dường như áp dụng cho định dạng đầu ra. Việc áp dụng lambda thực sự thay đổi giá trị được lưu trữ bên dưới. –

+0

@StephanDoliov Chính xác, vấn đề chính xác làm phiền tôi trong một thời gian dài. 'round()' chỉ có thể đặt độ chính xác hiển thị không được lưu trữ giá trị. – seizetheday

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