- Изменить тип данных столбцов в Pandas
- 1. to_numeric()
- Основное использование
- Обработка ошибок
- понижающее приведение
- 2. astype()
- Основное использование
- Быть осторожен
- 3. infer_objects()
- Изменить тип данных столбцов в Pandas
- ОТВЕТЫ
- Ответ 1
- 1. to_numeric()
- Основное использование
- Обработка ошибок
- понижающее приведение
- 2. astype()
- Основное использование
- Быть осторожен
- 3. infer_objects()
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Изменить тип данных столбцов в Pandas
- 1. to_numeric()
- Основное использование
- Обработка ошибок
- Понижающее приведение
- 2. astype()
- Основное использование
- Быть осторожен
- 3. infer_objects()
Изменить тип данных столбцов в Pandas
Я хочу преобразовать таблицу, представленную в виде списка списков, в Pandas DataFrame . В качестве чрезвычайно упрощенного примера:
Каков наилучший способ преобразования столбцов в соответствующие типы, в данном случае столбцы 2 и 3 в числа с плавающей точкой? Есть ли способ указать типы при конвертации в DataFrame? Или лучше сначала создать DataFrame, а затем перебрать столбцы, чтобы изменить тип каждого столбца? В идеале я хотел бы сделать это динамически, потому что может быть сотни столбцов, и я не хочу точно указывать, какие столбцы какого типа. Все, что я могу гарантировать, это то, что каждый столбец содержит значения одного типа.
У вас есть три основных варианта для преобразования типов в пандах:
to_numeric() — обеспечивает функциональность для безопасного преобразования нечисловых типов (например, строк) в подходящий числовой тип. (См. Также to_datetime() и to_timedelta() .)
astype() — преобразовать (почти) любой тип в (почти) любой другой тип (даже если это не всегда целесообразно). Также позволяет конвертировать в категориальные типы (очень полезно).
infer_objects() — служебный метод для преобразования столбцов объектов, содержащих объекты Python, в тип панд, если это возможно.
Продолжайте читать для более подробных объяснений и использования каждого из этих методов.
1. to_numeric()
Лучший способ преобразовать один или несколько столбцов DataFrame в числовые значения — использовать pandas.to_numeric() .
Эта функция попытается преобразовать нечисловые объекты (например, строки) в целые числа или числа с плавающей запятой, в зависимости от ситуации.
Основное использование
Вход to_numeric() является серия или один столбец DataFrame.
Как видите, новая серия возвращается. Не забудьте назначить этот вывод переменной или столбцу, чтобы продолжить его использовать:
Вы также можете использовать его для преобразования нескольких столбцов DataFrame с помощью apply() метода:
Пока ваши значения могут быть преобразованы, это, вероятно, все, что вам нужно.
Обработка ошибок
Но что, если некоторые значения не могут быть преобразованы в числовой тип?
to_numeric() также принимает errors аргумент ключевого слова, который позволяет принудительно указывать нечисловые значения NaN или просто игнорирует столбцы, содержащие эти значения.
Вот пример использования серии строк, s имеющих объект dtype:
Поведение по умолчанию — повышение, если оно не может преобразовать значение. В этом случае он не может справиться со строкой ‘pandas’:
Вместо того, чтобы потерпеть неудачу, мы могли бы хотеть, чтобы ‘панды’ считались отсутствующим / плохим числовым значением. Мы можем привести недопустимые значения к NaN следующему, используя errors ключевое слово аргумент:
Третий вариант errors — просто игнорировать операцию, если встречается недопустимое значение:
Этот последний вариант особенно полезен, когда вы хотите преобразовать весь свой DataFrame, но не знаете, какие из наших столбцов можно надежно преобразовать в числовой тип. В этом случае просто напишите:
Функция будет применяться к каждому столбцу DataFrame. Столбцы, которые можно преобразовать в числовой тип, будут преобразованы, тогда как столбцы, которые не могут (например, содержат нецифровые строки или даты), будут оставлены в покое.
понижающее приведение
По умолчанию преобразование с to_numeric() даст вам тип a int64 или float64 dtype (или любую целую ширину, присущую вашей платформе).
Обычно это то, что вы хотите, но что, если вы хотите сэкономить память и использовать более компактный dtype, например float32 , или int8 ?
to_numeric() дает вам возможность понижать до «целое число», «подписано», «без знака», «с плавающей точкой». Вот пример для простой серии s целочисленного типа:
Понижение до «целого» использует наименьшее возможное целое число, которое может содержать значения:
Даункастинг до ‘float’ аналогично выбирает плавающий тип меньше обычного:
2. astype()
Этот astype() метод позволяет вам четко указать тип d, который вы хотите иметь в своем DataFrame или Series. Он очень универсален в том, что вы можете попробовать перейти от одного типа к другому.
Основное использование
Просто выберите тип: вы можете использовать dum типа NumPy (например np.int16 ), некоторые типы Python (например, bool) или типы, специфичные для панд (например, категориальный dtype).
Вызовите метод для объекта, который вы хотите преобразовать, и astype() попытаетесь преобразовать его для вас:
Заметьте, я сказал «попробуй» — если astype() не знает, как преобразовать значение в Series или DataFrame, это вызовет ошибку. Например, если у вас есть значение NaN или, inf вы получите ошибку, пытаясь преобразовать его в целое число.
Начиная с панд 0.20.0, эта ошибка может быть устранена путем передачи errors=’ignore’ . Ваш оригинальный объект будет возвращен нетронутым.
Быть осторожен
astype() мощный, но иногда он будет преобразовывать значения «неправильно». Например:
Это маленькие целые числа, так как насчет преобразования в 8-битный тип без знака для экономии памяти?
Преобразование работало, но -7 был обернут, чтобы стать 249 (то есть 2 8 — 7)!
Попытка использовать downcast pd.to_numeric(s, downcast=’unsigned’) может помочь предотвратить эту ошибку.
3. infer_objects()
Версия 0.21.0 pandas представила метод infer_objects() для преобразования столбцов DataFrame, имеющих тип данных объекта, в более конкретный тип (мягкие преобразования).
Например, вот DataFrame с двумя столбцами типа объекта. Один содержит действительные целые числа, а другой содержит строки, представляющие целые числа:
Используя infer_objects() , вы можете изменить тип столбца ‘a’ на int64:
Источник
Изменить тип данных столбцов в Pandas
Я хочу преобразовать таблицу, представленную как список списков, в Pandas DataFrame. В качестве чрезвычайно упрощенного примера:
Каков наилучший способ преобразования столбцов в соответствующие типы, в этом случае столбцы 2 и 3 в поплавки? Есть ли способ указать типы при преобразовании в DataFrame? Или лучше сначала создать DataFrame, а затем пропустить столбцы, чтобы изменить тип для каждого столбца? В идеале я хотел бы сделать это динамически, потому что может быть сотни столбцов, и я не хочу точно указывать, какие столбцы имеют тип. Все, что я могу гарантировать, состоит в том, что каждый столбец содержит значения одного и того же типа.
ОТВЕТЫ
Ответ 1
У вас есть три основных варианта для преобразования типов в пандах:
to_numeric() — предоставляет функциональные возможности для безопасного преобразования нечисловых типов (например, строк) в подходящий числовой тип. (Смотрите также to_datetime() и to_timedelta() .)
astype() — преобразует (почти) любой тип в (почти) любой другой тип (даже если это не всегда целесообразно). Также позволяет конвертировать в категориальные типы (очень полезно).
infer_objects() — служебный метод для преобразования столбцов объектов, содержащих объекты Python, в тип панд, если это возможно.
Продолжайте читать для более подробных объяснений и использования каждого из этих методов.
1. to_numeric()
Лучший способ преобразовать один или несколько столбцов DataFrame в числовые значения — это использовать pandas.to_numeric() .
Эта функция попытается преобразовать нечисловые объекты (например, строки) в целые числа или числа с плавающей запятой, в зависимости от ситуации.
Основное использование
Входные данные для to_numeric() — это Series или отдельный столбец DataFrame.
Как видите, новая серия возвращается. Не забудьте назначить этот вывод переменной или столбцу для продолжения его использования:
Вы также можете использовать его для преобразования нескольких столбцов DataFrame с помощью метода apply() :
Пока ваши значения могут быть преобразованы, это, вероятно, все, что вам нужно.
Обработка ошибок
Но что, если некоторые значения не могут быть преобразованы в числовой тип?
to_numeric() также принимает аргумент ключевого слова errors который позволяет принудительно указывать для нечисловых значений значение NaN или просто игнорировать столбцы, содержащие эти значения.
Вот пример использования серии строк s которая имеет объект dtype:
Поведение по умолчанию — повышение, если оно не может преобразовать значение. В этом случае он не может справиться со строкой ‘pandas’:
Вместо того, чтобы терпеть неудачу, мы могли бы хотеть, чтобы ‘панды’ считались отсутствующим/плохим числовым значением. Мы можем привести недействительные значения к NaN следующим образом, используя аргумент errors :
Третий вариант для errors — просто игнорировать операцию, если встречается недопустимое значение:
Этот последний вариант особенно полезен, когда вы хотите преобразовать весь свой DataFrame, но не знаете, какие из наших столбцов можно надежно преобразовать в числовой тип. В этом случае просто напишите:
Функция будет применена к каждому столбцу DataFrame. Столбцы, которые можно преобразовать в числовой тип, будут преобразованы, тогда как столбцы, которые не могут (например, содержат нецифровые строки или даты), будут оставлены в покое.
понижающее приведение
По умолчанию преобразование с помощью to_numeric() даст вам int64 или float64 dtype (или любую целую ширину, присущую вашей платформе).
Обычно это то, что вы хотите, но что, если вы хотите сэкономить память и использовать более компактный dtype, такой как float32 или int8 ?
to_numeric() дает вам возможность понижать до целых чисел, со to_numeric() , без знака, с плавающей точкой. Вот пример для простой серии s целочисленного типа:
Понижение до «целого» использует наименьшее возможное целое число, которое может содержать значения:
Даункастинг до ‘float’ аналогично выбирает плавающий тип меньше обычного:
2. astype()
Метод astype() позволяет вам четко указывать dtype, который вы хотите иметь в своем DataFrame или Series. Он очень универсален в том, что вы можете попробовать перейти от одного типа к другому.
Основное использование
Просто выберите тип: вы можете использовать dum типа NumPy (например, np.int16 ), некоторые типы Python (например, bool) или типы, специфичные для панд (например, категориальный dtype).
Вызовите метод для объекта, который вы хотите преобразовать, и astype() попытается преобразовать его для вас:
Заметьте, я сказал «попробуй» — если astype() не знает, как преобразовать значение в Series или DataFrame, это вызовет ошибку. Например, если у вас есть значение NaN или inf вы получите ошибку, пытаясь преобразовать его в целое число.
Начиная с панд 0.20.0, эта ошибка может быть подавлена передачей errors=’ignore’ . Ваш оригинальный объект будет возвращен нетронутым.
Быть осторожен
astype() является мощным, но иногда он будет преобразовывать значения «неправильно». Например:
Это небольшие целые числа, так как насчет преобразования в 8-битный тип без знака для экономии памяти?
Преобразование сработало, но -7 было округлено до 249 (то есть 2 8 — 7)!
Попытка pd.to_numeric(s, downcast=’unsigned’) использованием pd.to_numeric(s, downcast=’unsigned’) вместо этого может помочь предотвратить эту ошибку.
3. infer_objects()
Версия 0.21.0 pandas представила метод infer_objects() для преобразования столбцов DataFrame, имеющих тип данных объекта, в более конкретный тип (мягкие преобразования).
Например, вот DataFrame с двумя столбцами типа объекта. Один содержит действительные целые числа, а другой содержит строки, представляющие целые числа:
Используя infer_objects() , вы можете изменить тип столбца ‘a’ на int64:
Столбец «b» остался один, поскольку его значения были строками, а не целыми числами. Если вы хотите попытаться преобразовать оба столбца в целочисленный тип, вместо этого вы можете использовать df.astype(int) .
Ответ 2
Как насчет этого?
Ответ 3
этот ниже код изменит тип данных столбца.
вместо типа данных вы можете указать свой тип данных. Что вы хотите, например, str, float, int и т.д.
Ответ 4
Вот функция, которая принимает в качестве своих аргументов DataFrame и список столбцов и коэрцирует все данные в столбцах в числа.
Итак, для вашего примера:
Ответ 5
Как создать два фрейма данных, каждый с разными типами данных для своих столбцов, а затем добавить их вместе?
Результаты
После создания фрейма данных вы можете заполнить его переменными с плавающей запятой в 1-м столбце и строки (или любой желаемый тип данных) во втором столбце.
Ответ 6
Когда мне нужно было указать только определенные столбцы, и я хочу быть явным, я использовал (для DOCS LOCATION):
Итак, используя оригинальный вопрос, но предоставив ему имена столбцов.
Ответ 7
Я думал, что у меня та же проблема, но на самом деле у меня есть небольшая разница, которая облегчает решение проблемы. Для других, смотрящих на этот вопрос, стоит проверить формат вашего входного списка. В моем случае числа изначально плавающие, а не строки, как в вопросе:
но слишком много обрабатывая список перед созданием кадра данных, я теряю типы, и все становится строкой.
Создание фрейма данных через массив NumPy
дает тот же кадр данных, что и в вопросе, где записи в столбцах 1 и 2 рассматриваются как строки. Однако делать
на самом деле дает кадр данных со столбцами в правильном формате
Источник
Изменить тип данных столбцов в Pandas
Я хочу преобразовать таблицу, представленную в виде списка списков, в Pandas DataFrame. В качестве чрезвычайно упрощенного примера:
Каков наилучший способ преобразования столбцов в соответствующие типы, в данном случае столбцы 2 и 3 в числа с плавающей точкой? Есть ли способ указать типы при конвертации в DataFrame? Или лучше сначала создать DataFrame, а затем перебрать столбцы, чтобы изменить тип каждого столбца? В идеале я хотел бы сделать это динамически, потому что может быть сотни столбцов, и я не хочу точно указывать, какие столбцы какого типа. Все, что я могу гарантировать, это то, что каждый столбец содержит значения одного типа.
У вас есть три основных варианта для преобразования типов в пандах.
1. to_numeric()
Лучший способ преобразовать один или несколько столбцов объекта DataFrame в числовые значения — использовать pandas.to_numeric() .
Эта функция попытается изменить нечисловые объекты (например, строки) на целые числа или числа с плавающей запятой, в зависимости от ситуации.
Основное использование
Входные данные для to_numeric() — это Series или отдельный столбец DataFrame.
Как видите, новая серия возвращается. Не забудьте назначить этот вывод имени переменной или столбца, чтобы продолжить его использовать:
Вы также можете использовать его для преобразования нескольких столбцов DataFrame с помощью метода apply() :
Пока ваши значения могут быть преобразованы, это, вероятно, все, что вам нужно.
Обработка ошибок
Но что, если некоторые значения не могут быть преобразованы в числовой тип?
to_numeric() также принимает аргумент ключевого слова errors , который позволяет принудительно устанавливать нечисловые значения как NaN или просто игнорировать столбцы, содержащие эти значения.
Вот пример с использованием серии строк s , которая имеет объект dtype:
Поведение по умолчанию — повышение, если оно не может преобразовать значение. В этом случае он не может справиться со строкой ‘pandas’:
Вместо того, чтобы терпеть неудачу, мы могли бы хотеть, чтобы ‘панды’ считались отсутствующим/плохим числовым значением. Мы можем привести неверные значения к NaN следующим образом, используя аргумент ключевого слова errors :
Третий вариант для errors просто игнорирует операцию, если встречается недопустимое значение:
Этот последний вариант особенно полезен, когда вы хотите преобразовать весь свой DataFrame, но не знаете, какие из наших столбцов можно надежно преобразовать в числовой тип. В этом случае просто напишите:
Функция будет применена к каждому столбцу DataFrame. Столбцы, которые можно преобразовать в числовой тип, будут преобразованы, тогда как столбцы, которые не могут (например, содержат нецифровые строки или даты), будут оставлены в покое.
Понижающее приведение
По умолчанию преобразование с to_numeric() даст вам int64 или float64 dtype (или любую целую ширину, присущую вашей платформе).
Обычно это то, что вы хотите, но что, если вы хотите сэкономить память и использовать более компактный тип dtype, например float32 или int8 ?
to_numeric() дает вам возможность понижать до целых чисел, со знаком, без знака, с плавающей точкой. Вот пример для простой серии s целочисленного типа:
При понижении до целочисленного значения используется наименьшее возможное целое число, которое может содержать значения:
При даункинге с плавающей точкой аналогично выбирается плавающий тип меньше обычного:
2. astype()
Метод astype() позволяет вам явно указывать dtype, который вы хотите иметь в своем DataFrame или Series. Он очень универсален в том, что вы можете попробовать перейти от одного типа к другому.
Основное использование
Просто выберите тип: вы можете использовать dum типа NumPy (например, np.int16 ), некоторые типы Python (например, bool) или типы, специфичные для панд (например, категориальный dtype).
Вызовите метод для объекта, который вы хотите преобразовать, и astype() попытается преобразовать его для вас:
Заметьте, я сказал «попробуй» — если astype() не знает, как преобразовать значение в Series или DataFrame, это вызовет ошибку. Например, если у вас есть значение NaN или inf , вы получите сообщение об ошибке при попытке преобразовать его в целое число.
Начиная с панд 0.20.0, эту ошибку можно устранить, передав errors=’ignore’ . Ваш оригинальный объект будет возвращен нетронутым.
Быть осторожен
astype() мощный, но иногда он будет преобразовывать значения «неправильно». Например:
Это небольшие целые числа, так как насчет преобразования в 8-битный тип без знака для экономии памяти?
Преобразование сработало, но значение -7 было округлено до 249 (т.е. 2 8 — 7)!
Попытка уменьшить использование pd.to_numeric(s, downcast=’unsigned’) вместо этого может помочь предотвратить эту ошибку.
3. infer_objects()
В версии 0.21.0 pandas появился метод infer_objects() для преобразования столбцов объекта DataFrame, имеющих тип данных объекта, в более конкретный тип (мягкие преобразования).
Например, вот DataFrame с двумя столбцами типа объекта. Один содержит действительные целые числа, а другой содержит строки, представляющие целые числа:
Используя infer_objects() , вы можете изменить тип столбца ‘a’ на int64:
Источник