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