更改 Pandas Dataframe 中一列或多列的数据类型
让我们看看在 Pandas Dataframe 中为一列或多列更改数据类型的不同方法。
方法 #1:使用 DataFrame.astype()
我们可以传递任何Python、 Numpy 或 Pandas 数据类型来将数据框的所有列更改为该类型,或者我们可以传递以列名作为键、数据类型作为值的字典来更改选定列的类型。
# importing pandas as pd
import pandas as pd
# sample dataframe
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': [1.1, '1.0', '1.3', 2, 5] })
# converting all columns to string type
df = df.astype(str)
print(df.dtypes)
输出:
# importing pandas as pd
import pandas as pd
# sample dataframe
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': [1.1, '1.0', '1.3', 2, 5] })
# using dictionary to convert specific columns
convert_dict = {'A': int,
'C': float
}
df = df.astype(convert_dict)
print(df.dtypes)
输出:
方法 #2:使用 DataFrame.apply()
我们可以将 pandas.to_numeric、pandas.to_datetime 和 pandas.to_timedelta 作为参数传递给apply()
函数,以将一列或多列的数据类型分别更改为 numeric、datetime 和 timedelta。
# importing pandas as pd
import pandas as pd
# sample dataframe
df = pd.DataFrame({
'A': [1, 2, 3, '4', '5'],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': [1.1, '2.1', 3.0, '4.1', '5.1'] })
# using apply method
df[['A', 'C']] = df[['A', 'C']].apply(pd.to_numeric)
print(df.dtypes)
输出:
方法 #3:使用 DataFrame.infer_objects()
此方法通过推断“对象”类型列的数据类型来尝试软转换。非对象和不可转换的列保持不变。
# importing pandas as pd
import pandas as pd
# sample dataframe
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': [1.1, 2.1, 3.0, 4.1, 5.1]
}, dtype ='object')
# converting datatypes
df = df.infer_objects()
print(df.dtypes)
输出: