Подтвердить что ты не робот

Pandas ".convert_objects (convert_numeric = True)" устарел

У меня есть эта строка в моем коде, который преобразует мои данные в числовые...

data["S1Q2I"] = data["S1Q2I"].convert_objects(convert_numeric=True)

Дело в том, что теперь новая версия pandas (0.17.0) говорит, что эта функция устарела. Это ошибка:

FutureWarning: convert_objects is deprecated.  
Use the data-type specific converters pd.to_datetime, 
pd.to_timedelta and pd.to_numeric. 
data["S3BD5Q2A"] = data["S3BD5Q2A"].convert_objects(convert_numeric=True)

Итак, я пошел в новую документацию, и я не мог найти никаких примеров того, как использовать новую функцию для преобразования моих данных...

Он говорит только это:

"DataFrame.convert_objects устарел в пользу специфичных для типа функций pd.to_datetime, pd.to_timestamp и pd.to_numeric (новый в 0.17.0) (GH11133)."

Любая помощь будет приятной!

4b9b3361

Ответ 1

Как объяснил @EvanWright в комментариях,

data['S1Q2I'] = pd.to_numeric(data['S1Q2I'])

теперь является предпочтительным способом преобразования типов. Подробное объяснение изменений можно найти в github PR GH11133.

Ответ 2

Вы можете произвести замену, применив как сделанный здесь. Примером может служить:

>>> import pandas as pd
>>> a = pd.DataFrame([{"letter":"a", "number":"1"},{"letter":"b", "number":"2"}])
>>> a.dtypes
letter    object
number    object
dtype: object
>>> b = a.apply(pd.to_numeric, errors="ignore")
>>> b.dtypes
letter    object
number     int64
dtype: object
>>> 

Но это отстой в два пути:

  • Вы должны использовать метод apply, а не метод non-native dataframe
  • Вам нужно скопировать на другой фрейм данных - не может быть сделано на месте. Так много для использования с "большими данными".

Я не очень люблю направление pandas. Я не использовал R data.table много, но пока это кажется превосходным.

Я думаю, что таблица данных с естественным преобразованием типа на месте довольно проста для конкурентной структуры анализа данных.

Ответ 3

Это зависит от версии Pandas...... если у вас Pandas версия 0.18.0 этот тип будет работать........

df['col name'] = df['col name'].apply(pd.to_numeric, errors='coerce') 

другие версии........

df['col name']=df.col name .astype(float)

Ответ 4

Вы можете заставить его правильно применить к определенному имени переменной в фреймворке данных без необходимости копировать в другой формат данных следующим образом:

>>> import pandas as pd
>>> a = pd.DataFrame([{"letter":"a", "number":"1"},{"letter":"b", "number":"2"}])
>>> a.dtypes
letter    object
number    object
dtype: object
>>> a['number'] = a['number'].apply(pd.to_numeric, errors='coerce')
>>> a.dtypes
letter    object
number     int64
dtype: object

Пример, основанный на исходном вопросе выше, будет примерно таким:

data['S1Q2I'] = data['S1Q2I'].apply(pd.to_numeric, errors='coerce')

Это работает так же, как ваш оригинал:

data['S1Q2I'] = data['S1Q2I'].convert_objects(convert_numeric=True)

в моих руках, во всяком случае....

Это не касается абзаца точки, сделанного о выводе типов данных, которые немного выше моей головы. Я боюсь!

Ответ 5

Если вы преобразуете все столбцы в числовые значения одновременно, этот код может работать.

data = data.apply(pd.to_numeric, axis=0)