Ответ 1
Документирование ответа, который работал у меня на основе комментария @piRSquared.
Мне нужно сначала преобразовать в строку, затем целое число.
>>> df['purchase'].astype(str).astype(int)
Я прочитал SQL-запрос в Pandas, и значения входят как dtype 'object', хотя это строки, даты и целые числа. Я могу преобразовать дату 'объект' в dtyetime dtyetime Pandas, но я получаю сообщение об ошибке при попытке преобразовать строку и целые числа.
Вот пример:
>>> 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
Преобразование df['date']
в datetime работает:
>>> 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]
Но я получаю сообщение об ошибке при попытке преобразования df['purchase']
в целое число:
>>> 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'
ПРИМЕЧАНИЕ. Я получаю аналогичную ошибку, когда я пробовал .astype('float')
И при попытке конвертировать в строку ничего не происходит.
>>> df['id'].apply(str)
1 abc1
2 abc2
3 abc3
4 abc4
Name: id, dtype: object
Документирование ответа, который работал у меня на основе комментария @piRSquared.
Мне нужно сначала преобразовать в строку, затем целое число.
>>> df['purchase'].astype(str).astype(int)
Выполните следующие действия:
1. очистите ваш файл → откройте ваш файл данных в формате csv
и увидите, что есть "?" вместо пустых мест и удалите их все.
2. удалите строки, содержащие пропущенные значения например.:
df.dropna(subset=["normalized-losses"], axis = 0 , inplace= True)
3. используйте astype для конвертации
df["normalized-losses"]=df["normalized-losses"].astype(int)
Примечание. Если вы все еще находите ошибки в вашей программе, то еще раз проверьте файл csv
, откройте его в Excel и выясните, есть ли "?" в нужном столбце, затем удалите его и сохраните файл, а затем вернитесь и запустите программу.
комментировать успех! если он работает. :)
Это просто
pd.factorize(df.purchase)[0]
Пример:
labels, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])'
labels
# array([0, 0, 1, 2, 0])
uniques
# array(['b', 'a', 'c'], dtype=object)
Мои данные поезда содержат три объекта: объект после применения astype
, он преобразует объект в числовой, но перед этим вам необходимо выполнить несколько шагов предварительной обработки:
train.dtypes
C12 object
C13 object
C14 Object
train['C14'] = train.C14.astype(int)
train.dtypes
C12 object
C13 object
C14 int32