Ответ 1
Как объяснил @EvanWright в комментариях,
data['S1Q2I'] = pd.to_numeric(data['S1Q2I'])
теперь является предпочтительным способом преобразования типов. Подробное объяснение изменений можно найти в github PR GH11133.
У меня есть эта строка в моем коде, который преобразует мои данные в числовые...
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)."
Любая помощь будет приятной!
Как объяснил @EvanWright в комментариях,
data['S1Q2I'] = pd.to_numeric(data['S1Q2I'])
теперь является предпочтительным способом преобразования типов. Подробное объяснение изменений можно найти в github PR GH11133.
Вы можете произвести замену, применив как сделанный здесь. Примером может служить:
>>> 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
>>>
Но это отстой в два пути:
Я не очень люблю направление pandas. Я не использовал R data.table много, но пока это кажется превосходным.
Я думаю, что таблица данных с естественным преобразованием типа на месте довольно проста для конкурентной структуры анализа данных.
Это зависит от версии 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)
Вы можете заставить его правильно применить к определенному имени переменной в фреймворке данных без необходимости копировать в другой формат данных следующим образом:
>>> 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)
в моих руках, во всяком случае....
Это не касается абзаца точки, сделанного о выводе типов данных, которые немного выше моей головы. Я боюсь!
Если вы преобразуете все столбцы в числовые значения одновременно, этот код может работать.
data = data.apply(pd.to_numeric, axis=0)