Hướng dẫn how to convert int column to object in python - cách chuyển đổi cột int thành đối tượng 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

Mooncrater

3.5744 Huy hiệu vàng27 Huy hiệu bạc53 Huy hiệu Đồng4 gold badges27 silver badges53 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.7264 huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu đồng4 gold badges18 silver badges25 bronze badges

0

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

cs95cs95cs95

347K87 Huy hiệu vàng637 Huy hiệu bạc685 Huy hiệu Đồng87 gold badges637 silver badges685 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

Nii Joshuanii JoshuaNii Joshua

1812 Huy hiệu bạc5 Huy hiệu Đồng2 silver badges5 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

Ihor Patsian

1.2702 Huy hiệu vàng15 Huy hiệu bạc24 Huy hiệu đồng2 gold badges15 silver badges24 bronze badges

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

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. :)

Đã 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ạc7 Huy hiệu đồng2 silver badges7 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

Talha Tayyab

2.37615 Huy hiệu vàng16 Huy hiệu bạc28 Huy hiệu đồng15 gold badges16 silver badges28 bronze badges

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

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

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

9932 Huy hiệu vàng13 Huy hiệu bạc26 Huy hiệu đồng2 gold badges13 silver badges26 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

Thepyguy

16.7K5 Huy hiệu vàng16 Huy hiệu bạc42 Huy hiệu đồng5 gold badges16 silver badges42 bronze badges

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

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

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.4204 Huy hiệu vàng35 Huy hiệu bạc62 Huy hiệu Đồng4 gold badges35 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

Làm thế nào để bạn chuyển đổi một int thành một đối tượng trong Python?

Làm thế nào để chuyển đổi INT thành đối tượng trong câu trả lời của mã Python..
# Sử dụng hàm float () để biến một chuỗi thành một float ..
Chuỗi = '123.456'.
số = float (chuỗi).
number..
# Đầu ra:.
# 123.456 ..

Làm cách nào để chuyển đổi một cột thành INT trong Python?

Chuyển đổi cột thành int (Integer) Sử dụng hàm dataFrame.Arype () để chuyển đổi cột thành int (integer), 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ộ dataFrame.Để chuyển loại dữ liệu lên số nguyên đã ký 64 bit, bạn có thể sử dụng Numpy.Int64, Numpy.Use pandas DataFrame. astype() function to convert column to int (integer), you can apply this on a specific column or on an entire DataFrame. To cast the data type to 64-bit signed integer, you can use numpy. int64 , numpy.

Làm thế nào để bạn chuyển đổi một cột trong Python?

Cách tốt nhất để chuyển đổi một hoặc nhiều cột của DataFrame thành các giá trị số là sử dụng pandas.to_numeric ().Chức năng này sẽ cố gắng thay đổi các đối tượng không phải là số (như chuỗi) thành số nguyên hoặc số điểm nổi nếu thích hợp.pandas. to_numeric() . This function will try to change non-numeric objects (such as strings) into integers or floating-point numbers as appropriate.

Làm thế nào để bạn chuyển đổi INT thành DataFrame trong Python?

Các bước để chuyển đổi số nguyên thành các chuỗi trong gấu trúc DataFrame..
Bước 1: Thu thập dữ liệu sẽ được chuyển đổi.Để bắt đầu, hãy thu thập dữ liệu mà bạn muốn chuyển đổi từ số nguyên thành chuỗi.....
Bước 2: Tạo DataFrame.....
Bước 3: Chuyển đổi các số nguyên thành chuỗi trong gấu trúc DataFrame ..

Chủ đề