2016-08-26 22 views
12

Tôi đã đọc truy vấn SQL vào Pandas và các giá trị được đưa vào dưới dạng dtype 'object', mặc dù chúng là chuỗi, ngày tháng và số nguyên. Tôi có thể chuyển đổi ngày 'đối tượng' thành dạng daspe datas của Pandas, nhưng tôi gặp lỗi khi cố chuyển đổi chuỗi và số nguyên.Pandas: chuyển đổi dtype 'đối tượng' thành int

Dưới đâ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 các df['date'] đến một 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 nhận được một lỗi khi cố gắng để chuyển đổi df['purchase'] đến một 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ử .astype('float')

Và khi cố chuyển đổi thành 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 
+2

Tôi đoán, hãy thử 'df [ 'mua']. Astype (str) .astype (int) ' – piRSquared

+2

Không có chuỗi dtype. Nó vẫn là đối tượng. Đối với cái còn lại, hãy thử 'pd.to_numeric tổng quát hơn (df ['purchase'])' thì bạn có thể thêm '.astype (int)' nếu thành công. – ayhan

+0

@piRSquared - vâng, điều đó đã hiệu quả. – cyril

Trả lời

24

Viết câu trả lời phù hợp với tôi dựa trên nhận xét của @piRSquared.

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

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

Làm thế nào gây phiền nhiễu khi cần chuyển đổi đầu tiên thành str rồi int! Tôi không hiểu tại sao nó lại như vậy. –

-1

Nó đơn giản

pd.factorize(df['purchase'])[0] 

factorize cột đối tượng và trả lại nguyên mới nhãn

Các vấn đề liên quan