Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Tôi đã đọc một truy vấn SQL vào gấu trúc và các giá trị đang xuất hiện dưới dạng 'đối tượng', mặc dù chúng là chuỗi, ngày và số nguyên. Tôi có thể chuyển đổi ngày 'đối tượng' thành DTYPE DateTime Pandas, nhưng tôi đang gặp lỗi khi cố gắng chuyển đổi chuỗi và số nguyên.

Đây là một ví dụ:

>>> import pandas as pd
>>> df = pd.read_sql_query('select * from my_table', conn)
>>> df
    id    date          purchase
 1  abc1  2016-05-22    1
 2  abc2  2016-05-29    0
 3  abc3  2016-05-22    2
 4  abc4  2016-05-22    0

>>> df.dtypes
 id          object
 date        object
 purchase    object
 dtype: object

Chuyển đổi

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
4 thành DateTime hoạt động:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 

Nhưng tôi gặp lỗi khi cố gắng chuyển đổi

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
5 thành số nguyên:

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'

Lưu ý: Tôi gặp lỗi tương tự khi tôi đã thử

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
6

Và khi cố gắng chuyển đổi thành một chuỗi, dường như không có gì xảy ra.

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Mooncrater

3.6504 huy hiệu vàng27 Huy hiệu bạc54 Huy hiệu đồng4 gold badges27 silver badges54 bronze badges

Khi được hỏi ngày 26 tháng 8 năm 2016 lúc 19:54Aug 26, 2016 at 19:54

2

Ghi lại câu trả lời làm việc cho tôi dựa trên nhận xét của @pirsquared.

Tôi cần chuyển đổi thành một chuỗi trước, sau đó là một số nguyên.

>>> df['purchase'].astype(str).astype(int)

Đã trả lời ngày 29 tháng 8 năm 2016 lúc 22:14Aug 29, 2016 at 22:14

Cyrilcyrilcyril

2.7864 huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu đồng4 gold badges18 silver badges25 bronze badges

1

gấu trúc> = 1.0

>>> df['purchase'].astype(int) .... pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)() pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)() TypeError: long() argument must be a string or a number, not 'java.lang.Long' 7

Câu trả lời được chấp nhận (bản thân) không xem xét khả năng NAN trong các cột đối tượng.

df = pd.DataFrame({
     'a': [1, 2, np.nan], 
     'b': [True, False, np.nan]}, dtype=object) 
df                                                                         

     a      b
0    1   True
1    2  False
2  NaN    NaN

df['a'].astype(str).astype(int) # raises ValueError

Điều này nghẹt thở vì NAN được chuyển đổi thành một chuỗi "NAN", và những nỗ lực tiếp theo để ép buộc đến số nguyên sẽ thất bại. Để tránh vấn đề này, chúng ta có thể các cột chuyển đổi mềm sang loại có thể tưởng tượng tương ứng của chúng bằng cách sử dụng

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
7:

df.convert_dtypes()                                                        

      a      b
0     1   True
1     2  False
2  <NA>   <NA>

df.convert_dtypes().dtypes                                                 

a      Int64
b    boolean
dtype: object

Nếu dữ liệu của bạn có văn bản rác được trộn lẫn với INT của bạn, bạn có thể sử dụng

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
9 làm bước đầu tiên:

s = pd.Series(['1', '2', '...'])
s.convert_dtypes()  # converts to string, which is not what we want

0      1
1      2
2    ...
dtype: string 

# coerces non-numeric junk to NaNs
pd.to_numeric(s, errors='coerce')

0    1.0
1    2.0
2    NaN
dtype: float64

# one final `convert_dtypes` call to convert to nullable int
pd.to_numeric(s, errors='coerce').convert_dtypes() 

0       1
1       2
2    <NA>
dtype: Int64

Đã trả lời ngày 13 tháng 2 năm 2020 lúc 8:55Feb 13, 2020 at 8:55

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

cs95cs95cs95

353K87 Huy hiệu vàng653 Huy hiệu bạc704 Huy hiệu đồng87 gold badges653 silver badges704 bronze badges

df['col_name'] = pd.to_numeric(df['col_name'])

Đây là một lựa chọn tốt hơn

Đã trả lời ngày 24 tháng 3 năm 2021 lúc 10:46Mar 24, 2021 at 10:46

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Nii Joshuanii JoshuaNii Joshua

2093 Huy hiệu bạc6 Huy hiệu Đồng3 silver badges6 bronze badges

1

Nó đơn giản

pd.factorize(df.purchase)[0]

Example:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
0
>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
1
>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
2

Đã trả lời ngày 10 tháng 8 năm 2017 lúc 4:55Aug 10, 2017 at 4:55

KarirukariruKariru

Huy hiệu đồng 1131 Bạc3 Huy hiệu đồng1 silver badge3 bronze badges

3

Dữ liệu tàu của tôi chứa ba tính năng là đối tượng sau khi áp dụng

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
0 Nó chuyển đổi đối tượng thành số nhưng trước đó, bạn cần thực hiện một số bước tiền xử lý:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
3

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Ihor Patsian

1.2802 Huy hiệu vàng15 Huy hiệu bạc25 Huy hiệu đồng2 gold badges15 silver badges25 bronze badges

Đã trả lời ngày 4 tháng 9 năm 2019 lúc 5:24Sep 4, 2019 at 5:24

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Thực hiện theo các bước sau:

1. Tệp tệp của bạn -> Mở DataFile của bạn ở định dạng

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
1 và thấy rằng có "?" thay cho những nơi trống và xóa tất cả chúng.

2.Drop các hàng chứa các giá trị bị thiếu, ví dụ::

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
4

3. Sử dụng astype ngay bây giờ để chuyển đổi

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
5

Lưu ý: Nếu vẫn tìm thấy lỗi trong chương trình của bạn thì một lần nữa kiểm tra tệp

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
1 của bạn, hãy mở nó trong Excel để tìm xem có "?" Trong cột yêu cầu của bạn, sau đó xóa nó và lưu tệp và quay lại và chạy chương trình của bạn.

Nhận xét thành công! Nếu nó hoạt động. :)

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Đã trả lời ngày 7 tháng 4 năm 2018 lúc 9:51Apr 7, 2018 at 9:51

1

Không thể nhận xét để đăng bài này như một câu trả lời, phần nào nằm giữa @pirsquared/ @cyril's giải pháp và @CS95's:

Theo ghi nhận của @CS95, nếu dữ liệu của bạn chứa NANS hoặc NONES, việc chuyển đổi thành loại chuỗi sẽ gây ra lỗi khi cố gắng chuyển đổi sang int sau đó.

Tuy nhiên, nếu dữ liệu của bạn bao gồm các chuỗi (số), sử dụng

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
7 sẽ chuyển đổi nó thành loại chuỗi trừ khi bạn sử dụng
>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
9 theo đề xuất của @CS95 (có khả năng kết hợp với
>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
5).

Trong trường hợp dữ liệu của bạn chỉ bao gồm các chuỗi số (bao gồm cả Nans hoặc Nones nhưng không có bất kỳ "rác" nào không phải là số lượng bởi gấu trúc (đã có trong phiên bản 0.24) (xem thêm câu trả lời này):

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
6

Lưu ý rằng đã có những cuộc thảo luận gần đây về điều này trên GitHub (hiện đang là vấn đề đã đóng lại) và trong trường hợp số nguyên 64 bit rất dài, bạn có thể phải chuyển đổi rõ ràng sang

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
6 để tránh xấp xỉ trong quá trình chuyển đổi.

Đã trả lời ngày 27 tháng 2 năm 2020 lúc 15:27Feb 27, 2020 at 15:27

Onietosionietosionietosi

2432 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges

Để thay đổi kiểu dữ liệu và lưu nó vào khung dữ liệu, cần phải thay thế kiểu dữ liệu mới như sau:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
7

hoặc

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
8

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Talha Tayyab

2.74416 Huy hiệu vàng18 Huy hiệu bạc31 Huy hiệu đồng16 gold badges18 silver badges31 bronze badges

Đã trả lời ngày 2 tháng 5 năm 2021 lúc 13:05May 2, 2021 at 13:05

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Trong trường hợp của tôi, tôi đã có một DF với dữ liệu hỗn hợp:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
9

Các phao thực sự là đối tượng, nhưng tôi cần chúng là những chiếc phao thực sự.

Để sửa nó, hãy tham khảo nhận xét của @AMC ở trên:

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
0

Đã trả lời ngày 23 tháng 4 năm 2020 lúc 16:04Apr 23, 2020 at 16:04

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

sqqqrlysqqqrlysqqqrly

8471 Huy hiệu vàng7 Huy hiệu bạc1 gold badge7 silver badges10 bronze badges

Nếu các phương thức này thất bại, bạn có thể thử một danh sách hiểu như thế này:

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
1

Đã trả lời ngày 23 tháng 5 năm 2021 lúc 13:38May 23, 2021 at 13:38

ZakszaksZakS

9933 Huy hiệu vàng13 Huy hiệu bạc27 Huy hiệu đồng3 gold badges13 silver badges27 bronze badges

Chuyển đổi đối tượng sang số

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
7 hoặc
>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object
8.

Mã là:-

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
2

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

Thepyguy

17.3k5 Huy hiệu vàng17 Huy hiệu bạc44 Huy hiệu đồng5 gold badges17 silver badges44 bronze badges

Đã trả lời ngày 3 tháng 8 năm 2021 lúc 10:39Aug 3, 2021 at 10:39

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

0

Sử dụng dây dẫn ASTYPE để chuyển đổi kiểu dữ liệu của cột đó

Đã trả lời ngày 8 tháng 8 lúc 16:46Aug 8 at 16:46

Hướng dẫn how do you convert an object to int in python? - làm thế nào để bạn chuyển đổi một đối tượng thành int trong python?

2

Đây là dữ liệu của tôi

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'
3

Tôi khuyên bạn chỉ nên sử dụng điều này với dữ liệu nhỏ.Mã này có độ phức tạp của O (n^2).

Xyand

4.4404 Huy hiệu vàng36 Huy hiệu bạc62 Huy hiệu Đồng4 gold badges36 silver badges62 bronze badges

Đã trả lời ngày 29 tháng 3 năm 2020 lúc 13:54Mar 29, 2020 at 13:54

3

Chúng ta có thể chuyển đổi đối tượng thành int trong python không?

Nếu đối tượng của bạn là một chuỗi, thì bạn có thể sử dụng phương thức Integer.valueOf () để chuyển đổi nó thành một int đơn giản: int i = integer.use the Integer. valueOf() method to convert it into a simple int : int i = Integer.

Kiểu dữ liệu đối tượng trong Python là gì?

Một đối tượng Kiểu dữ liệu (một thể hiện của lớp DTYPE.Nó mô tả các khía cạnh sau của dữ liệu: loại dữ liệu (số nguyên, float, đối tượng Python, v.v.)describes how the bytes in the fixed-size block of memory corresponding to an array item should be interpreted. It describes the following aspects of the data: Type of the data (integer, float, Python object, etc.)