用户会给你填写奇奇怪怪的东西,你想好怎么应对了吗?今天在刷leetcode的pandas,2885. Rename Columns,有感而发。
直接看题目吧,其实很简单,但是我现在会想,万一有的测试样例里面,Column Name不是这四个,或者顺序错了怎么办。偷懒可以直接令columns = [,,,,,,]
,但是如果顺序不对,缺少或者更多,程序都会报错。
DataFrame
students
+————-+——–+ | Column Name | Type | +————-+——–+ | id | int | | first | object | | last | object | | age | int | +————-+——–+ Write a solution to rename the columns as follows:
id
tostudent_id
first
tofirst_name
last
tolast_name
age
toage_in_years
所以我选择了更稳健的写法,如下。使用dict的get方法可以轻松处理异常。
1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
def renameColumns(students: pd.DataFrame) -> pd.DataFrame:
rename_dct = {
'id':'student_id',
'first':'first_name',
'last':'last_name',
'age':'age_in_years'
}
students.columns = [rename_dct.get(x, x) for x in students.columns]
return students
以往的代码我习惯于独立开发,因此每个参数的递交,在我的体系里都有严格规定。尽管Python没有C++的强类别要求,但是在理想情况下,某个函数得到的相关参数一定是被理想提交的。要求是整数2,就不能有字符串’2’。
比如说,在一个填写年龄的地方,不同的用户填写了20、30岁、廿三这样的变量。这看起来很离谱,但我有时候习惯把日期写作mm/dd/yyyy
的形式。有时候是很抓狂的,你说这到底是mm/dd
还是dd/mm
?所以我会把月份用三位字母代替,比如10/Oct/2024
,甚至简化成10OCT24
.
不一定会报错,报错也是小概率事件,但是强调事前预防。一步到位,否则后面debug的时候花上大半天找错很不值得。要求细心但是不可能每一次都不犯错,这是很难做到的。其实用不上很久,我现在有很好的debug技巧😎
刚写完这篇文章,就在2887. Fill Missing Data宰了跟头。别问为什么,问就是把兄弟列也给填充了。笑死