如何在 Pandas 中自动转换为最佳数据类型?
Pandas 是 Python 中流行的数据处理库,用于清理和转换数据。它提供了各种转换数据类型的功能,例如 astype() 方法。但是,手动转换数据类型可能非常耗时且容易出错。
为了解决这个问题,Pandas 在 1.0 版中引入了一项名为 convert_dtypes() 的新功能,该功能允许根据列中的数据自动将列转换为最适合的数据类型。此功能消除了手动类型转换的需要,并确保数据格式正确。
转换 Pandas 系列的数据类型
请考虑下面显示的代码,我们将在其中转换 Pandas 系列的数据类型。
示例
import pandas as pd # 创建具有混合数据类型的系列 data = pd.Series(['1', '2', '3.1', '4.0', '5']) # 打印系列的数据类型 print("Original data types:") print(data.dtypes) # 自动将系列转换为最佳数据类型 data = pd.to_numeric(data, errors='coerce') # 转换后打印系列的数据类型 print("\nNew data types:") print(data.dtypes) # 打印更新后的 Series print("\nUpdated Series:") print(data)
说明
使用 import 语句导入 Pandas 库。
创建一个名为 data 的 Pandas Series,其中包含混合数据类型,包括整数和字符串。
使用 dtypes 属性打印 Series 的原始数据类型。
使用 pd.to_numeric() 方法自动将 Series 转换为最佳数据类型。
传递带有值 'coerce' 的 errors 参数,以强制将任何无效值转换为 NaN。
使用 dtypes 属性打印 Series 的新数据类型。
打印更新后的 Series系列。
要运行上述代码,我们需要运行下面显示的命令。
命令
python3 main.py
输出
Original data types: object New data types: float64 Updated Series: 0 1.0 1 2.0 2 3.1 3 4.0 4 5.0 dtype: float64
转换 Pandas DataFrame 的数据类型
请考虑下面显示的代码
示例
import pandas as pd # 创建具有混合数据类型的示例数据框 data = {'name': ['John', 'Marry', 'Peter', 'Jane', 'Paul'], 'age': [25, 30, 40, 35, 27], 'gender': ['Male', 'Female', 'Male', 'Female', 'Male'], 'income': ['$500', '$1000', '$1200', '$800', '$600']} df = pd.DataFrame(data) # 打印数据框的原始数据类型 print("原始数据类型:\n", df.dtypes) # 将"age"列转换为浮点数 df['age'] = df['age'].astype(float) # 通过删除美元符号将"income"列转换为整数 df['income'] = df['income'].str.replace('$', '').astype(int) # 打印数据框的新数据类型 print("\n新数据类型:\n", df.dtypes) print("\n转换后的数据框:\n", df)
说明
首先,我们导入必要的库:Pandas。
我们创建一个包含对象、int64 和字符串等混合数据类型的示例 DataFrame值。
我们使用 dtypes 属性打印 DataFrame 的原始数据类型。
我们使用 astype() 方法将"age"列转换为浮点数,该方法将列数据类型转换为指定类型。
我们使用 str.replace() 方法删除美元符号,将"income"列转换为整数,然后使用 astype() 方法将字符串转换为整数。
我们使用 dtypes 属性打印 DataFrame 的新数据类型以确认数据类型转换。
最后,我们打印整个 DataFrame 以查看转换后的数据类型。
注意:astype() 方法用于将 Series 转换为指定的数据类型,而 DataFrame 的 astype() 方法用于转换多列的数据类型。
输出
原始数据类型: name object age int64 gender object income object dtype: object 新数据类型: name object age float64 gender object income int64 dtype: object 转换后的数据框: name age gender income 0 John 25.0 Male 500 1 Marry 30.0 Female 1000 2 Peter 40.0 Male 1200 3 Jane 35.0 Female 800 4 Paul 27.0 Male 600
结论
总之,转换数据类型是数据分析和操作中必不可少的任务。Pandas 为我们提供了各种转换数据类型的方法,例如在加载数据时指定数据类型、使用 astype() 方法转换系列或数据框,以及使用 infer_objects() 方法自动检测每列的最佳数据类型。
为每列选择合适的数据类型对于优化内存使用和提高数据分析性能至关重要。