作者:Frank Andrade,译者:张峰
众所周知,编写Python代码在开始时十分容易,但随着你在工具包中添加更多的库,你的脚本可能会有不必要的代码行,变得冗长而混乱。可能短期内能够应付工作,但长期来看,麻烦不小。
在这篇文章中,我将与你分享7个技巧,使你在使用Python进行数据科学时更加简洁。这涵盖了我们日常所做的事情,例如修改Pandas数据框中的值,连接字符串,读取文件等操作!
1. 使用Lambda来修改Pandas数据框中的值
假设我们有以下df
数据框:
现在由于某种原因,你需要在第0
列的数字上添加01
的值。一个常见的方法是定义一个函数来完成这个任务,然后用 apply 函数来修改一列的值。
这并不复杂,但是在数据框中对每一个改变创建一个函数是不切实际的。这时lambda就派上了用场。
lambda函数类似于普通的Python函数,但它可以不使用名称来定义,这使得它成为一个漂亮的单行代码。之前使用的代码可以用以下方式来减少。
当你不知道是否可以访问一个系列的属性来修改数据时,Lambda变得非常有用。
例如,列0
包含字母,我们想把它们大写。
2. 使用f-string来连接字符串
字符串连接是Python中非常常见的操作,它可以用不同的方法来完成。最常见的方法是使用+
运算符;然而,这个运算符的一个问题是我们不能在字符串之间添加任何分隔符。
当然,如果你想把 "Hello "和 "World "连接起来,一个典型的变通方法是添加一个空白分隔符(" ")。
这就完成了工作,但为了写出更可读的代码,我们可以用一个f-string来代替它。
在一个基本的例子中,这似乎是不必要的,但是当涉及到连接多个值时(正如你将在提示#3中看到的),f-string将使你免于书写多次+ " " +
。我不知道过去有多少次不得不写+
运算符,但现在不会了!
其他连接字符串的方法是使用join()
方法或format()
函数,然而f-string在字符串连接方面做得更好。
3. 用Zip()函数对多个列表进行迭代
你是否曾经想在 Python 中循环遍历一个以上的列表?当你有两个列表时,你可以用 enumerate
来实现。
然而,当你有两个或更多的列表时,这变得不切实际。一个更好的方法是使用zip()
函数。zip()
函数接收迭代数据,将它们聚集在一个元组中,并返回之。
让我们再增加一个列表,看看zip()
的威力!
上述代码的输出结果为:
此处你注意到我们在这个例子中使用了f-string吗?代码变得更有可读性,不是吗?
4. 使用列表理解法
清洗和处理数据的一个常见步骤是修改现有的列表。比如,我们有以下需要大写的列表:
将words列表的每个元素大写的典型方法是创建一个新的大写列表,执行一次 for 循环,使用.title(),然后将每个修改的值附加到新的列表中。
然而,Pythonic的方法是使用列表理解来做到这一点。列表理解有一种优雅的方法来制作列表。
你可以用一行代码重写上面的for
循环:
由此我们可以跳过第一个例子中的一些步骤,结果是一样的。
5. 对文件对象使用with语句
当在一个项目上工作时,我们经常会对文件进行读写操作。最常见的方法是使用open()
函数打开一个文件,它会创建一个我们可以操作的文件对象,然后作为一个习惯的做法,我们应该使用close()
关闭该文件对象。
这很容易记住,但有时写了几个小时的代码,我们可能会忘记用f.close()
关闭f
文件。这时,with
语句就派上了用场。with
语句将自动关闭文件对象f
,形式如下:
有了这个,我们可以保持代码的简短。
你不需要用它来读取CSV文件,因为你可以用pandas的 pd.read_csv()
轻松地读取,但在读取其他类型的文件时,这仍然很有用。例如,从pickle文件中读取数据时经常使用它。
6. 停止使用方括号来获取字典项, 利用.get()代替
比如,有以下一个字典:
我们可以通过person[name]
和person[age]
分别获得姓名和年龄。但是,由于某种原因,我们想获得一个不存在的键,如 "工资",运行person[salary]
会引发一个`KeyError'。
这时,get()方法就有用了。如果键在字典中,get()方法返回指定键的值,但是如果没有找到键,Python 将返回None。得益于此,你的代码不会中断。
输出结果如下:
7. 多重赋值
你是否曾想减少用于创建多个变量、列表或字典的代码行数?那么,你可以用多重赋值轻松做到这一点。