[nhập mô tả hình ảnh tại đây][1] [nhập mô tả hình ảnh tại đây][2] [nhập mô tả hình ảnh tại đây][3]
[1]. https. //tôi. cây rơm. imgur. com/Smws8. png [2]. https. //tôi. cây rơm. imgur. com/Se11H. png [3]. https. //tôi. cây rơm. imgur. com/RQm4R. png
NaN là viết tắt của Not a Number. Nó là một kiểu dữ liệu số được sử dụng để đại diện cho bất kỳ giá trị nào không xác định hoặc không thể trình bày. Giá trịError. không thể chuyển đổi NaN float thành số nguyên được nâng lên vì Pandas không có khả năng lưu trữ giá trị NaN cho số nguyên
Làm thế nào để giải quyết không thể chuyển đổi NaN float thành số nguyên?
Từ Pandas v0. 24, giới thiệu Kiểu dữ liệu số nguyên không thể cho phép số nguyên cùng tồn tại với NaN. Điều này không cho phép số nguyên NaN. Đây là số nguyên pandas, thay vì số nguyên numpy
Cố gắng chuyển đổi dưới dạng số nguyên
Điều này sẽ tạo ra ValueError. Không thể chuyển đổi các giá trị không hữu hạn [NA hoặc inf] thành số nguyên
Vì vậy, hãy sử dụng Kiểu dữ liệu số nguyên không thể bỏ qua [e. g. int64]
Giải pháp 2
sử dụng numpy. nan_to_num[]
các numpy. nan_to_num[] trả về một mảng hoặc vô hướng thay thế Không phải là Số [ Not A Number ] bằng 0, positive_infinity bằng một số rất lớn và negative_infinity bằng một số rất nhỏ [hoặc âm]
Ở đây bạn nhận được giá trị đầu ra là NAN
Tiếp theo, bạn có thể kiểm tra giá trị NAN bằng isnan[value] , nếu đó là giá trị NAN thì bạn có thể chuyển đổi bằng nan_to_num[]
Ở đây bạn có thể thấy nan_to_num[] đã thay đổi giá trị NaN thành 0. 0 mà sau đó có thể được chuyển đổi thành một số nguyên
Nguồn đầy đủ
Nếu bạn không hài lòng với các giải pháp trên, bạn cần cho biết bạn muốn làm gì với NAN. Bạn có thể thả những hàng đó df. dropna[] hoặc thay thế nans bằng thứ khác [0 chẳng hạn. df. điền[0] ]
Có một lớp được lưu trữ trong ArcGIS Online. Nó chứa kết quả Survey123. Tôi muốn tải kết quả dưới dạng khung dữ liệu được kích hoạt theo không gian bằng cách sử dụng API ArcGIS cho Python, trong Notebook hiện tại nhưng cuối cùng sẽ chuyển sang tập lệnh. Có các trường kiểu Số nguyên trong lớp được lưu trữ. Một số hoặc tất cả các trường này chứa giá trị null/trống. Tôi nhận được vật phẩm bằng cách sử dụng gis. Nội dung. get[], cung cấp id vật phẩm mà không gặp vấn đề gì. Sau đó tôi truy xuất lớp, theo vị trí chỉ mục 0 vì chỉ có 1. Sau khi truy xuất lớp tôi gọi [bên dưới], tất cả theo hướng dẫn tại https. // nhà phát triển. vòng cung. com/python/guide/part2-data-io-reading-data/. Điều này đã hoạt động trong quá khứ trên các dự án khác mà không có vấn đề gì
pd.DataFrame.spatial.from_layer[my_layer]
Vấn đề là lần này tôi gặp một ngoại lệ và không thể tạo khung dữ liệu
IntCastingNaNError: Cannot convert non-finite values [NA or inf] to integer
Có vẻ như bạn không thể cung cấp dtypes hoặc fillna để giải quyết vấn đề này trước khi nó xảy ra. from_layer[] dường như không chấp nhận kwargs và lấy lược đồ của lớp được lưu trữ. Sau nhiều lần tìm kiếm, tôi đã thử một truy vấn mở của lớp mà không cần bất kỳ bộ lọc nào, v.v. Chỉ cần gọi đơn giản
sdf = layer.query[].sdf
Và điều này hoạt động, mà không đưa ra một ngoại lệ.
NHƯNG, nếu bạn chuyển as_df=True vào truy vấn[], bạn sẽ nhận được IntCastingNaNError giống như tôi đã đề cập trước đó
query[as_df=True]
Điều này có vẻ như hành vi không nhất quán. Đây có phải là một lỗi/xử lý sai hoặc dự kiến và tại sao?
Cột dic trong khung dữ liệu bên dưới chứa các giá trị nan và float. bất cứ khi nào kiểu dữ liệu của các cột dic được thay đổi thành int. Lỗi `ValueError. Không thể chuyển đổi số không hữu hạn [NA hoặc inf] thành số nguyên` hoặc `ValueError. Không thể chuyển đổi NaN float thành số nguyên` đang xảy ra
Lỗi
Chương trình
import pandas as pd
import numpy as np
data = {
'Name': ['Jack', 'Rack', 'Max', 'David'],
'dic':[np.nan,98.9, 99.90,100.0],
'Subject': ['Math', 'Math', 'Math', np.inf]
}
dfobj = pd.DataFrame[data]
dfobj['dic'] = dfobj['dic'].astype[int]
print[dfobj ]
đầu ra
ValueError: Cannot convert non-finite values [NA or inf] to integer
Dung dịch
Sử dụng hàm fillna[]
Lỗi này có thể được sửa bằng cách sử dụng phương thức fillna[0] của khung dữ liệu của gấu trúc để thay thế tất cả các giá trị nan trong cột "dic" bằng 0 hoặc một giá trị bạn chọn, chẳng hạn như fillna[100]. Loại cột "dic" bây giờ có thể được chuyển đổi thành "số nguyên" trong bước sau mà không mắc lỗi
- Nhập khẩu gấu trúc
- nhập NumPy
- Gọi dfobj. hàm fillna[0] để thay thế giá trị nan bằng 0
- Thay thế loại cột 'dic' bằng float thành số nguyên ở bước cuối cùng
import pandas as pd
import numpy as np
data = {
'Name': ['Jack', 'Rack', 'Max', 'David'],
'dic':[np.nan,98.9, 99.90,100],
'Subject': ['Math', 'Math', 'Math', 'Phy']
}
dfobj = pd.DataFrame[data]
dfobj = dfobj.fillna[0]
dfobj['dic'] = dfobj['dic'].astype[int]
print[dfobj ]
print['\n type of dic column is : ',dfobj['dic'].dtype ]
Sử dụng hàm dropna[]
Ví dụ Python sau đây cho thấy cách giải quyết ValueError. Không thể chuyển đổi NaN float thành số nguyên bằng dropna[]. Trước tiên, cột "dic" sẽ xóa tất cả các giá trị NAN bằng cách sử dụng phương thức dropna[] của khung dữ liệu Pandas, phương thức này sẽ cho phép chúng tôi chuyển đổi loại cột "dic" thành "số nguyên" mà không gặp phải bất kỳ sự cố nào
- Nhập khẩu gấu trúc
- nhập mô-đun NumPy
- Gọi dfobj. Phương thức dropna[] sẽ xóa tất cả các giá trị nan khỏi cột dic và thay thế giá trị nan bằng 0
- Bước cuối cùng liên quan đến việc thay đổi loại cột "dic" từ float thành số nguyên
import pandas as pd
import numpy as np
data = {
'Name': ['Jack', 'Rack', 'Max', 'David'],
'dic':[np.nan,98.9, 99.90,100],
'Subject': ['Math', 'Math', 'Math', 'Phy']
}
dfobj = pd.DataFrame[data]
dfobj = dfobj.dropna[]
dfobj['dic'] = dfobj['dic'].astype[int]
print[dfobj ]
print['\n type of dic column:',dfobj['dic'].dtype ]
Sử dụng hàm thay thế[]
Để khắc phục sự cố về giá trị trong chương trình Python này, chúng tôi đã sử dụng kỹ thuật khung dữ liệu Pandas replace[] .
Trước tiên, chúng tôi sẽ thay thế tất cả các giá trị NAN trong cột "dic" bằng 0 trước khi thay đổi chính xác loại cột "dic" thành "số nguyên" bằng cách sử dụng phương pháp astype[]
________số 8Phần kết luận
Trong bài viết này, chúng ta đã học cách giải quyết `ValueError`, lỗi này xảy ra khi cố gắng chuyển đổi các cột kiểu float trong `Khung dữ liệu Pandas chứa các giá trị không hữu hạn [NA hoặc inf] thành số nguyên`. Các phương thức khung dữ liệu `fillna[]`, `dropna[]` và `replace[]` có thể được sử dụng để giải quyết nó