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
Tôi đoán, hãy thử 'df [ 'mua']. Astype (str) .astype (int) ' – piRSquared
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
@piRSquared - vâng, điều đó đã hiệu quả. – cyril