Как использовать df.astype () внутри функции apply - PullRequest
0 голосов
/ 13 июля 2020

У меня есть фрейм данных, в котором все данные в столбцах относятся к типу object. Теперь я хочу преобразовать все объекты в типы numeri c с помощью функции astype (), но я не хочу делать что-то подобное ->

df.astype({'col1': 'int32' , 'col2' : 'int32' ....})

Если я что-то сделаю вот так ->

введите описание изображения здесь

Я получаю сообщение об ошибке, потому что для функции apply требуется серия.

PS: Другой вариант сделать то же самое ->

df.apply(pd.to_numeric)

Но я хочу сделать это с помощью .astype () Есть ли другой способ вместо использования df.apply () и по-прежнему преобразовывать все данные типа объекта в numeri c с помощью df.astype ()

Ответы [ 3 ]

1 голос
/ 13 июля 2020

Если это object столбцы, и вы уверены, что они могут быть "мягко преобразованы" в int, у вас есть два варианта:

df
  worker day    tasks
0      A   2     read
1      A   9    write
2      B   1     read
3      B   2    write
4      B   4  execute

df.dtypes

worker    object
day       object
tasks     object
dtype: object

pandas <= 0,25 </h3> infer_objects (только 0,21+) преобразует ваши данные в numpy типы, если это возможно. df.infer_objects().dtypes worker object day int64 tasks object dtype: object pandas> = 1.0

convert_dtypes преобразует ваши данные в наиболее конкретные c pandas тип расширения, если возможно.

df.convert_dtypes().dtypes

worker    string
day        Int64
tasks     string
dtype: object

Также см. этот мой ответ для получения дополнительной информации о "жесткие" и "мягкие" преобразования.

1 голос
/ 13 июля 2020

На мой взгляд, наиболее безопасным является использование pd.to_numeric в вашей функции apply, которая также позволяет манипулировать ошибками, coerce, raise или ignore. После получения столбцов в numeri c вы можете безопасно выполнить операцию astype(), но я бы не предлагал начинать ее с:

df.apply(pd.to_numeric, errors='ignore')

Если столбец не может быть преобразован в numeri c, он останется без изменений

df.apply(pd.to_numeric, errors='coerce')

Столбцы будут преобразованы в numeri c, значения, которые не могут быть преобразованы в numeri c в столбце, будут заменены на NaN.

df.apply(pd.to_numeric, errors='raise')

ValueError будет возвращено, если столбец не может быть преобразован в numeri c

1 голос
/ 13 июля 2020

Используйте df = df.astype(int) для преобразования всех столбцов в тип данных int

import numpy

df.astype(numpy.int32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...