跳至主要內容

2886. 改变数据类型


2886. 改变数据类型

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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),其中 ngrade 列中的元素数量,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