countrybeer_servingsspirit_servingswine_servingstotal_litres_of_pure_alcoholcontinent0Afghanistan0000. 0Châu Á1Albania89132544. 9Châu Âu2Algeria250140. 7Châu Phi3Andorra24513831212. 4Châu Âu4Angola21757455. 9Châu Phi
Trong [5]
drinks.dtypes
Ra[5]
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object
Tóm tắt kiểu dữ liệu
- 3 số nguyên [int64]
- 1 thả nổi [float64]
- 2 đối tượng [đối tượng]
Phương pháp 1. Thay đổi kiểu dữ liệu sau khi đọc csv
Trong [8]
# to change use .astype[] drinks['beer_servings'] = drinks.beer_servings.astype[float]
Trong [10]
drinks.dtypes
Ra[10]
country object beer_servings float64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object
Phương pháp 2. Thay đổi kiểu dữ liệu trước khi đọc csv
Trong [11]
drinks = pd.read_csv[url, dtype={'beer_servings':float}]
Trong [12]
drinks.dtypes
Ra[12]
country object beer_servings float64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object
Trong [13]
url = '//bit.ly/drinksbycountry' drinks = pd.read_csv[url]1
Trong [14]
url = '//bit.ly/drinksbycountry' drinks = pd.read_csv[url]2
Ra[14]
order_idquantityitem_namechoice_descriptionitem_price011Chip chiên và Salsa cà chua tươiNaN$2. 39111Izze[Clementine]$3. 39211Nantucket Nectar[Apple]$3. 39311Khoai tây chiên và Salsa ớt xanh cà chuaNaN$2. 39422 Chicken Bowl[Tomatillo-Red Chili Salsa [Nóng], [Đậu đen. $16. 98
Cách tốt nhất để chuyển đổi một hoặc nhiều cột của DataFrame thành giá trị số là sử dụng pandas. to_numeric[]
Hàm này sẽ cố gắng thay đổi các đối tượng không phải là số [chẳng hạn như chuỗi] thành số nguyên hoặc số dấu phẩy động khi thích hợp
sử dụng cơ bản
Đầu vào của to_numeric[] là một Chuỗi hoặc một cột của Khung dữ liệu
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object0
Như bạn có thể thấy, một Sê-ri mới được trả về. Hãy nhớ gán đầu ra này cho một biến hoặc tên cột để tiếp tục sử dụng nó
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object1
Bạn cũng có thể sử dụng nó để chuyển đổi nhiều cột của DataFrame thông qua phương thức apply[]
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object2
Miễn là tất cả các giá trị của bạn có thể được chuyển đổi, đó có thể là tất cả những gì bạn cần
xử lý lỗi
Nhưng nếu một số giá trị không thể chuyển đổi thành kiểu số thì sao?
to_numeric[] cũng nhận một đối số từ khóa lỗi cho phép bạn buộc các giá trị không phải là số phải là NaN hoặc chỉ cần bỏ qua các cột chứa các giá trị này
Đây là một ví dụ sử dụng Chuỗi chuỗi có đối tượng là dtype
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object3
Hành vi mặc định là tăng nếu nó không thể chuyển đổi một giá trị. Trong trường hợp này, nó không thể đối phó với chuỗi 'gấu trúc'
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object4
Thay vì thất bại, chúng tôi có thể muốn 'gấu trúc' được coi là một giá trị số bị thiếu/xấu. Chúng tôi có thể ép buộc các giá trị không hợp lệ thành NaN như sau bằng cách sử dụng đối số từ khóa lỗi
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object5
Tùy chọn thứ ba cho lỗi là bỏ qua thao tác nếu gặp phải giá trị không hợp lệ
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object6
Tùy chọn cuối cùng này đặc biệt hữu ích khi bạn muốn chuyển đổi toàn bộ Khung dữ liệu của mình, nhưng không biết cột nào trong số các cột của chúng tôi có thể được chuyển đổi đáng tin cậy sang loại số. Trong trường hợp đó, chỉ cần viết
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object7
Chức năng sẽ được áp dụng cho từng cột của DataFrame. Các cột có thể chuyển đổi thành kiểu số sẽ được chuyển đổi, trong khi các cột không thể [e. g. chúng chứa các chuỗi hoặc ngày không phải chữ số] sẽ được để yên
hạ thấp
Theo mặc định, chuyển đổi với to_numeric[] sẽ cung cấp cho bạn kiểu dtype int64 hoặc float64 [hoặc bất kỳ chiều rộng số nguyên nào dành cho nền tảng của bạn]
Đó thường là những gì bạn muốn, nhưng nếu bạn muốn tiết kiệm bộ nhớ và sử dụng một dtype nhỏ gọn hơn, như float32 hoặc int8 thì sao?
to_numeric[] cung cấp cho bạn tùy chọn chuyển thành 'số nguyên', 'có dấu', 'không dấu', 'số float'. Dưới đây là ví dụ về một chuỗi loại số nguyên đơn giản
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object8
Truyền xuống 'số nguyên' sử dụng số nguyên nhỏ nhất có thể chứa các giá trị
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object9
Downcasting để 'float' tương tự chọn một loại nổi nhỏ hơn bình thường
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object10
2. astype[]
Phương thức astype[] cho phép bạn xác định rõ ràng về loại dtype mà bạn muốn DataFrame hoặc Sê-ri của mình có. Nó rất linh hoạt ở chỗ bạn có thể thử và chuyển từ loại này sang loại khác
sử dụng cơ bản
Chỉ cần chọn một loại. bạn có thể sử dụng một NumPy dtype [e. g. np. int16], một số loại Python [e. g. bool] hoặc các loại dành riêng cho gấu trúc [như dtype phân loại]
Gọi phương thức trên đối tượng bạn muốn chuyển đổi và astype[] sẽ thử và chuyển đổi nó cho bạn
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object11
Lưu ý rằng tôi đã nói "thử" - nếu astype[] không biết cách chuyển đổi một giá trị trong Sê-ri hoặc Khung dữ liệu, nó sẽ gây ra lỗi. Ví dụ: nếu bạn có giá trị NaN hoặc inf thì bạn sẽ gặp lỗi khi cố chuyển đổi giá trị đó thành số nguyên
kể từ gấu trúc 0. 20. 0, bạn có thể loại bỏ lỗi này bằng cách chuyển errors='ignore'. Đối tượng ban đầu của bạn sẽ được trả lại nguyên vẹn
Hãy cẩn thận
astype[] rất mạnh nhưng đôi khi sẽ chuyển đổi giá trị "không chính xác". Ví dụ
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object8
Đây là những số nguyên nhỏ, vậy chuyển đổi sang loại 8 bit không dấu để tiết kiệm bộ nhớ thì sao?
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object13
Việc chuyển đổi đã thành công, nhưng -7 đã được bao quanh để trở thành 249 [i. e. 28 - 7]
Đang cố gắng hạ thấp bằng cách sử dụng pd. to_numeric[s, downcast='unsigned'] thay vào đó có thể giúp ngăn chặn lỗi này
3. infer_objects[]
Phiên bản 0. 21. 0 trong số gấu trúc đã giới thiệu phương thức infer_objects[] để chuyển đổi các cột của DataFrame có kiểu dữ liệu đối tượng thành một loại cụ thể hơn [chuyển đổi mềm]
Ví dụ: đây là DataFrame có hai cột thuộc loại đối tượng. Một cái chứa các số nguyên thực tế và cái còn lại chứa các chuỗi đại diện cho các số nguyên
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object14
Sử dụng infer_objects[], bạn có thể thay đổi loại cột 'a' thành int64
country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object15
Cột 'b' đã được để yên vì các giá trị của nó là chuỗi, không phải số nguyên. Nếu muốn thử và buộc chuyển đổi cả hai cột thành một loại số nguyên, bạn có thể sử dụng df. astype[int] thay vào đó
Hãy theo dõi hoặc kết nối với tôi để biết các bài viết về chủ đề AWS và Machine Learning. Nếu bạn quan tâm đến việc muốn bình luận chủ đề cụ thể bên dưới để cho tôi biết. Cảm ơn bạn