Чтобы изменить тип данных столбцов DataFrame, используйте метод astype(), infer_objects() или pd.to_numeric.
В этом руководстве мы подробно рассмотрим некоторые из этих процессов на примерах.
Метод 1: использование astype()
DataFrame.astype() приводит этот DataFrame к указанному типу данных. Ниже приводится синтаксис метода.
astype(dtype, copy=True, errors='raise', **kwargs)
Нас интересует только первый аргумент dtype – это тип данных или dict имени столбца.
Итак, давайте использовать метод astype() с аргументом dtype, чтобы изменить тип данных одного или нескольких столбцов DataFrame.
Как изменить тип данных одного столбца?
Давайте сначала начнем с изменения типа данных только для одного столбца.
В следующей программе мы изменим тип данных столбца a на float.
import pandas as pd
import numpy as np
#initialize a dataframe
df = pd.DataFrame(
[[21, 72, 67],
[23, 78, 62],
[32, 74, 54],
[52, 54, 76]],
columns=['a', 'b', 'c'])
print('Previous Datatypes\n', df.dtypes, sep='')
#change datatype of column
df = df.astype({'a': np.float})
#print results
print('\nNew Datatypes\n', df.dtypes, sep='')
print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes
a int64
b int64
c int64
dtype: object
New Datatypes
a float64
b int64
c int64
dtype: object
DataFrame
a b c
0 21.0 72 67
1 23.0 78 62
2 32.0 74 54
3 52.0 54 76
Как изменить тип данных нескольких столбцов?
Теперь давайте изменим тип данных более чем для одного столбца. Все, что нам нужно сделать, это предоставить больше пар column_name: datatype key:value в аргументе метода astype().
В следующей программе мы изменим тип данных столбца a на float, а b на int8.
import pandas as pd
import numpy as np
#initialize a dataframe
df = pd.DataFrame(
[[21, 72, 67],
[23, 78, 62],
[32, 74, 54],
[52, 54, 76]],
columns=['a', 'b', 'c'])
print('Previous Datatypes\n', df.dtypes, sep='')
#change datatype of column
df = df.astype({'a': np.float, 'b': np.int8})
#print results
print('\nNew Datatypes\n', df.dtypes, sep='')
print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes
a int64
b int64
c int64
dtype: object
New Datatypes
a float64
b int8
c int64
dtype: object
DataFrame
a b c
0 21.0 72 67
1 23.0 78 62
2 32.0 74 54
3 52.0 54 76
Как изменить тип данных всех столбцов?
Если вы хотите изменить тип данных всех столбцов DataFrame, вы можете просто передать этот тип данных в качестве аргумента методу astype() без словаря.
В следующей программе мы изменим тип данных всех столбцов на float.
import pandas as pd
import numpy as np
#initialize a dataframe
df = pd.DataFrame(
[[21, 72, 67],
[23, 78, 62],
[32, 74, 54],
[52, 54, 76]],
columns=['a', 'b', 'c'])
print('Previous Datatypes\n', df.dtypes, sep='')
#change datatype of column
df = df.astype(np.float)
#print results
print('\nNew Datatypes\n', df.dtypes, sep='')
print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes
a int64
b int64
c int64
dtype: object
New Datatypes
a float64
b float64
c float64
dtype: object
DataFrame
a b c
0 21.0 72.0 67.0
1 23.0 78.0 62.0
2 32.0 74.0 54.0
3 52.0 54.0 76.0
Метод 2: pd.to_numeric
Предположим, вы импортировали DataFrame из Excel, CSV или другого источника и получили все строковые значения для элементов DataFrame. Типом данных этих столбцов может быть объект. Далее преобразуем типы данных всех этих столбцов в соответствующие числовые типы данных.
Используйте следующий синтаксис для преобразования типа данных столбцов DataFrame в числовые.
df = df.apply(pd.to_numeric)
import pandas as pd
import numpy as np
#initialize a dataframe
df = pd.DataFrame(
[['21', '72', '67'],
['23', '78', '62'],
['32', '74', '54'],
['52', '54', '76']],
columns=['a', 'b', 'c'])
print('Previous Datatypes\n', df.dtypes, sep='')
#change datatype of all columns
df = df.apply(pd.to_numeric)
#print results
print('\nNew Datatypes\n', df.dtypes, sep='')
print('\nDataFrame\n', df, sep='')
Вывод:
Previous Datatypes
a object
b object
c object
dtype: object
New Datatypes
a int64
b int64
c int64
dtype: object
DataFrame
a b c
0 21 72 67
1 23 78 62
2 32 74 54
3 52 54 76
Обобщая это руководство по Python, мы узнали, как изменить тип данных столбцов в DataFrame.