2886. 改变数据类型
2886. 改变数据类型
题目
DataFrame students
+-------------+--------+ | Column Name | Type | +-------------+--------+ | student_id | int | | name | object | | age | int | | grade | float | +-------------+--------+
Write a solution to correct the errors:
The grade column is stored as floats, convert it to integers.
The result format is in the following example.
Example 1:
Input:
DataFrame students:
+------------+------+-----+-------+ | student_id | name | age | grade | +------------+------+-----+-------+ | 1 | Ava | 6 | 73.0 | | 2 | Kate | 15 | 87.0 | +------------+------+-----+-------+Output:
+------------+------+-----+-------+ | student_id | name | age | grade | +------------+------+-----+-------+ | 1 | Ava | 6 | 73 | | 2 | Kate | 15 | 87 | +------------+------+-----+-------+Explanation:
The data types of the column grade is converted to int.
题目大意
DataFrame students
+-------------+--------+ | Column Name | Type | +-------------+--------+ | student_id | int | | name | object | | age | int | | grade | float | +-------------+--------+
编写一个解决方案来纠正以下错误:
grade 列被存储为浮点数,将它转换为整数。
返回结果格式如下示例所示。
示例 1:
输入:
DataFrame students:
+------------+------+-----+-------+ | student_id | name | age | grade | +------------+------+-----+-------+ | 1 | Ava | 6 | 73.0 | | 2 | Kate | 15 | 87.0 | +------------+------+-----+-------+输出:
+------------+------+-----+-------+ | student_id | name | age | grade | +------------+------+-----+-------+ | 1 | Ava | 6 | 73 | | 2 | Kate | 15 | 87 | +------------+------+-----+-------+解释:
grade 列的数据类型已转换为整数。
解题思路
- 使用 Pandas 的
astype()方法,可以将一个列的数据类型转换为指定的类型。 - 通过
students['grade'].astype(int)将grade列的类型转换为整数。 astype()方法会返回一个新的 DataFrame,因此需要返回修改后的 DataFrame。- 检查边界情况:
- 如果
grade列已经是整数类型,转换操作不会对数据产生影响。 - 如果
grade列包含缺失值或无法转换为整数的数据,代码会抛出ValueError,需要先进行处理(例如使用pd.to_numeric()或填充缺失值)。
- 如果
复杂度分析
- 时间复杂度:
O(n),其中n是grade列中的元素数量,astype()方法遍历grade列进行类型转换。 - 空间复杂度:
O(n),返回一个新的 DataFrame。
代码
import pandas as pd
def changeDatatype(students: pd.DataFrame) -> pd.DataFrame:
# 使用 pd.to_numeric() 将无法转换的值变为 NaN
# students['grade'] = pd.to_numeric(students['grade'], errors='coerce')
# 处理缺失值,可以选择填充缺失值(例如填充为 0)
# students['grade'].fillna(0, inplace=True)
# 将 grade 列转换为整数类型
students['grade'] = students['grade'].astype(int)
return students
