Pandas.errors.intcastingnanerror: 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

[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

  1. Nhập khẩu gấu trúc
  2. nhập NumPy
  3. Gọi dfobj. hàm fillna[0] để thay thế giá trị nan bằng 0
  4. 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

  1. Nhập khẩu gấu trúc
  2. nhập mô-đun NumPy
  3. 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
  4. 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ố 8

Phầ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ó

Làm cách nào để chuyển đổi NaN thành số nguyên trong gấu trúc?

Sử dụng numpy. Tiếp theo, bạn có thể kiểm tra giá trị NAN bằng cách sử dụng isnan[value] , nếu đó là giá trị NAN thì bạn có thể chuyển đổi bằng cách sử dụ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.

Làm cách nào để chuyển đổi cột thành số nguyên trong gấu trúc?

Sử dụng DataFrame của gấu trúc. hàm astype[] để chuyển đổi cột thành int [số nguyên], bạn có thể áp dụng điều này trên một cột cụ thể hoặc trên toàn bộ Khung dữ liệu. Để truyền kiểu dữ liệu thành số nguyên có chữ ký 64 bit, bạn có thể sử dụng numpy. int64 , gọn gàng.

Làm cách nào để chuyển đổi DataFrame float thành int trong Python?

Cách chuyển đổi số float thành số nguyên trong Pandas DataFrame .
Cột DataFrame cụ thể sử dụng astype[int] hoặc apply[int]
Toàn bộ Khung dữ liệu trong đó kiểu dữ liệu của tất cả các cột là float
Khung dữ liệu hỗn hợp trong đó kiểu dữ liệu của một số cột là float
DataFrame chứa các giá trị NaN

Làm cách nào để chuyển đổi NaN float thành chuỗi?

Gấu trúc. Cách thay thế giá trị NaN bằng chuỗi .
Phương pháp 1. Thay thế các giá trị NaN bằng chuỗi trong Toàn bộ khung dữ liệu df. fillna['', inplace=True]
Phương pháp 2. Thay thế các giá trị NaN bằng chuỗi trong các cột cụ thể df[['col1', 'col2']] = df[['col1','col2']]. điền['']
Phương pháp 3. Thay thế các giá trị NaN bằng Chuỗi trong một cột df. col1 = df

Chủ Đề