Pandas DataFrame中的转换函数
Pandas是Python中最强大的库之一,提供了高性能的数据处理和分析工具,它允许我们使用DataFrame来处理表格数据,如电子表格、CSV和SQL数据。
DataFrame是一个二维带标签的数据结构,它以行和列的形式表示数据。每列中的数据可能具有不同的数据类型。
DataFrame:
Integers Floats Strings Dates
0 1.0 1.300 p 2023-05-07
1 2.0 NaN y 2023-05-14
2 5.0 4.600 t 2023-05-21
3 3.0 1.020 h 2023-05-28
4 6.0 0.300 o 2023-06-04
5 NaN 0.001 n 2023-06-11
上面示范的DataFrame具有6行和4列,并且每行中的数据具有不同的数据类型。
并且, 转换函数 用于将DataFrame对象中的元素的数据类型转换。在本文中,我们将讨论Pandas DataFrame中的不同类型转换函数。
输入输出场景
让我们看一下输入输出场景,以了解如何使用转换函数进行类型转换。
假设我们有一个包含几列不同数据类型的DataFrame,并且在输出中,我们将看到具有更新的列数据类型的DataFrame。
Input DataFrame:
ints strs ints2 floats
0 1 x 10.0 NaN
1 2 y NaN 100.5
2 3 NaN 20.0 200.0
Data Types of the each column is:
ints int64
strs object
ints2 float64
floats float64
Output DataFrame:
ints strs ints2 floats
0 1 x 10 <NA>
1 2 y <NA> 100.5
2 3 <NA> 20 200.0
Data Types of the resultant DataFrame is:
ints Int64
strs string
ints2 Int64
floats Float64
DataFrame.convert_dtypes() 函数
pandas DataFrame.convert_dtypes() 函数用于将列的数据类型转换为最适合的类型,使用支持 pd.NA 的 dtypes,并返回一个具有更新 dtypes 的新 DataFrame 对象。
语法
DataFrame.convert_dtypes(infer_objects=True, convert_string=True, convert_integer=True, convert_boolean=True, convert_floating=True)
参数
所有参数的默认值都为True。这些参数用于指示是否应将对象的数据类型转换为最佳的数据类型。
示例
在这个示例中,我们将使用.convert_dtypes()方法来转换DataFrame列的数据类型。
import pandas as pd
import numpy as np
df = pd.DataFrame({"a":[1, 2, 3],
"b": ["x", "y", "z"],
"c": [True, False, np.nan],
"d": ["h", "i", np.nan],
"e": [10, np.nan, 20],
"f": [np.nan, 100.5, 200]})
print("Input DataFrame:")
print(df)
print('Data Types of the each column is: ')
print(df.dtypes)
# Convert the data type of columns
result = df.convert_dtypes()
print("Output DataFrame:")
print(result)
print('Data Types of the resultant DataFrame is: ')
print(result.dtypes)
输出
Input DataFrame:
a b c d e f
0 1 x True h 10.0 NaN
1 2 y False i NaN 100.5
2 3 z NaN NaN 20.0 200.0
Data Types of the each column is:
a int64
b object
c object
d object
e float64
f float64
dtype: object
Output DataFrame:
a b c d e f
0 1 x True h 10
1 2 y False i 100.5
2 3 z 20 200.0
Data Types of the resultant DataFrame is:
a Int64
b string
c boolean
d string
e Int64
f Float64
dtype: object
最初,我们使用dtypes()方法检查DataFrame列的数据类型。然后使用convert_dtypes()方法将列“b”的数据类型转换为字符串,c转换为布尔值,“d”转换为字符串,以及将“e”转换为int64。
DataFrame.astype()函数
pandas的DataFrame.astype()函数用于将pandas对象的数据类型转换为指定的dtype。以下是语法-
DataFrame.astype(dtype, copy, errors)
参数
- dtype:数据类型,或者字典 {col: dtype, …},其中col是列标签,dtype是numpy.dtype或Python类型,用于将DataFrame的一个或多个列转换为特定的数据类型。
-
copy:默认值为True,指示是在原始DataFrame中进行更改(False)还是创建副本(True)。
-
errors:默认值为’raise’。指示在错误上忽略错误还是引发异常的参数。
示例
在这个示例中,我们将使用astype()函数将所有列的数据类型转换为对象类型。
import pandas as pd
df = pd.DataFrame({'Integers':[1, 2, 5, 3, 6, 0],
'Floats': [1.3, None, 4.6, 1.02, 0.3, 0.001],
'Strings': ['p', 'y', 't', 'h', 'o', 'n'],
'Dates': pd.date_range('2023-05-04', periods=6, freq='W')})
print("Input DataFrame:")
print(df)
print('Data Types of each column is: ')
print(df.dtypes)
# Convert the data type of columns
result = df.astype('object')
print("Output DataFrame:")
print(result)
print('Data Types of the resultant DataFrame is: ')
print(result.dtypes)
输出
Input DataFrame:
Integers Floats Strings Dates
0 1 1.300 p 2023-05-07
1 2 NaN y 2023-05-14
2 5 4.600 t 2023-05-21
3 3 1.020 h 2023-05-28
4 6 0.300 o 2023-06-04
5 0 0.001 n 2023-06-11
Data Types of each column is:
Integers int64
Floats float64
Strings object
Dates datetime64[ns]
dtype: object
Output DataFrame:
Integers Floats Strings Dates
0 1 1.3 p 2023-05-07 00:00:00
1 2 NaN y 2023-05-14 00:00:00
2 5 4.6 t 2023-05-21 00:00:00
3 3 1.02 h 2023-05-28 00:00:00
4 6 0.3 o 2023-06-04 00:00:00
5 0 0.001 n 2023-06-11 00:00:00
Data Types of the resultant DataFrame is:
Integers object
Floats object
Strings object
Dates object
dtype: object
将所有列的数据类型转换为对象类型。
示例
让我们通过使用字典来转换几列的数据类型,再看一个示例。
import pandas as pd
df = pd.DataFrame({'Integers':[1, 2, 5, 3, 6, 0],
'Floats': [1.3, None, 4.6, 1.02, 0.3, 0.001],
'Strings': ['p', 'y', 't', 'h', 'o', 'n'],
'Dates': pd.date_range('2023-05-04', periods=6, freq='W')})
print("Input DataFrame:")
print(df)
print('Data Types of each column is: ')
print(df.dtypes)
# Convert the data type of columns
result = df.astype({'Floats':'object', 'Strings': 'category'})
print("Output DataFrame:")
print(result)
print('Data Types of the resultant DataFrame is: ')
print(result.dtypes)
输出
Input DataFrame:
Integers Floats Strings Dates
0 1 1.300 p 2023-05-07
1 2 NaN y 2023-05-14
2 5 4.600 t 2023-05-21
3 3 1.020 h 2023-05-28
4 6 0.300 o 2023-06-04
5 0 0.001 n 2023-06-11
Data Types of each column is:
Integers int64
Floats float64
Strings object
Dates datetime64[ns]
dtype: object
Output DataFrame:
Integers Floats Strings Dates
0 1 1.3 p 2023-05-07
1 2 NaN y 2023-05-14
2 5 4.6 t 2023-05-21
3 3 1.02 h 2023-05-28
4 6 0.3 o 2023-06-04
5 0 0.001 n 2023-06-11
Data Types of the resultant DataFrame is:
Integers int64
Floats object
Strings category
Dates datetime64[ns]
dtype: object
“Floats”和“Strings”两列被转换为object和category dtypes类型。