
10 Python 一行代码,助您提升数据科学工作流程
作者 | Ideogram 提供图片
Python 是最流行的数据科学编程语言,因为它功能多样且社区支持良好。随着使用量的增加,有很多方法可以改进我们的数据科学工作流程,而您可能不知道。
在本文中,我们将探讨十种不同的 Python 一行代码,它们将极大地提升您的数据科学工作。
它们是什么?让我们来看看。
1. 高效处理缺失数据
缺失数据在数据集中是持续存在的问题。这可能是由于多种原因造成的,从数据管理不善到自然条件等。尽管如此,我们需要决定如何处理缺失数据。
有些人会将其归类为缺失数据或全部删除。但是,有时我们会选择填充缺失数据。
如果我们想填充缺失数据,可以使用 Pandas 的 fillna
方法。它易于使用,因为我们只需要将要填充的值作为缺失值的替换项即可,但我们可以使其更高效。
让我们看看下面的代码。
1 2 |
df.fillna({col: df[col].median() for col in df.select_dtypes(include='number').columns} | {col: df[col].mode()[0] for col in df.select_dtypes(include='object').columns}, inplace=True) |
通过将 fillna
与条件结合,我们可以用中位数填充数值缺失数据,用众数填充类别缺失数据。
只需一行代码,您就可以快速填充所有不同列中的缺失数据。
2. 移除高度相关的特征
多重共线性发生在我们的数据集中存在许多相互高度相关的自变量,而不是与目标变量相关时。这会对模型性能产生负面影响,因此我们希望保留相关性较低的特征。
我们可以将 Pandas 的相关性特征与条件选择结合起来,快速选择相关性较低的特征。例如,以下是我们选择与其他特征的皮尔逊相关性低于 0.95 的特征的方法。
1 |
df = df.loc[:, df.corr().abs().max() < 0.95] |
尝试使用相关特征和阈值,以查看预测模型是否良好。
3. 条件列应用
使用多个条件创建新列有时会很复杂,执行这些操作的代码也可能很长。但是,我们可以使用 Pandas 的 apply 方法,在开发新特征时使用特定条件,同时仍然利用多个列的值。
例如,以下是创建新列的示例,该新列的值基于其他列值的情况。
1 |
df['new_col'] = df.apply(lambda x: x['A'] * x['B'] if x['C'] > 0 else x['A'] + x['B'], axis=1) |
您可以尝试其他符合您要求的条件。
4. 查找共同元素和不同元素
Python 提供了许多内置数据类型,包括 Set。Set 数据类型是独特的数据,代表无序数据列表,但只包含唯一元素。它通常用于许多数据操作,包括查找共同元素。
例如,我们有以下集合
1 2 |
set1 = {"apple", "banana", "cherry", "date", "fig"} set2 = {"cherry", "date", "elderberry", "fig", "grape"} |
然后,我们要找到两个集合之间的共同元素。我们可以使用以下方法。
1 |
set1.intersection(set2) |
输出
1 |
{'cherry', 'date', 'fig'} |
这是一个查找共同元素的简单但实用的方法。反过来,我们也可以找到两个集合中不同的元素。
1 |
set1.difference(set2) |
输出
1 |
{'apple', 'banana'} |
当您需要查找共同元素和不同元素时,请尝试在数据工作流程中使用它们。
5. 布尔掩码进行过滤
在使用 NumPy 数组及其派生对象时,我们有时希望根据要求过滤数据。在这种情况下,我们可以创建一个布尔掩码来根据我们设置的布尔条件过滤数据。
假设我们有以下数据列表。
1 2 |
import numpy as np data = np.array([10, 15, 20, 25, 30, 35, 40, 45, 50]) |
然后,我们可以使用布尔掩码过滤我们想要的数据。例如,我们只想要偶数。
1 |
data[(data % 2 == 0)] |
输出
1 |
array([10, 20, 30, 40, 50]) |
这也是 Pandas 过滤的基础;然而,布尔掩码可以更通用,因为它也适用于 NumPy 数组。
6. 列表计数出现次数
当处理列表或其他包含多个值的数据时,有时我们想知道每个值的频率。在这种情况下,我们可以使用 counter 函数自动计数。
例如,考虑以下列表。
1 |
data = [10, 10, 20, 20, 30, 35, 40, 40, 40, 50] |
然后,我们可以使用 counter 函数计算频率。
1 2 |
from collections import Counter Counter(data) |
输出
1 |
Counter({10: 2, 20: 2, 30: 1, 35: 1, 40: 3, 50: 1}) |
结果是出现次数的字典。当您需要快速计算频率时请使用它们。
7. 从文本中提取数字
正则表达式(Regex)是匹配文本中模式的定义字符列表。当我们需要执行特定的文本操作时,通常会使用它们,这正是我们可以使用此一行代码执行的操作。
在下面的示例中,我们可以结合使用 Regex 和 map 来从文本中提取数字。
1 2 |
import re list(map(int, re.findall(r'\d+', "Sample123Text456"))) |
输出
1 |
[123, 456] |
上面的示例仅适用于整数数据,但学习更多关于正则表达式的知识可以为您提供力量和灵活性,以适应多种用例。
8. 展平嵌套列表
当准备数据进行分析时,我们可能会遇到包含列表中嵌套列表的数据,这可以称为嵌套。如果我们遇到这种情况,我们可能希望将其展平以进行进一步的数据分析或可视化。
例如,假设我们有以下嵌套列表。
1 2 3 4 5 |
nested_list = [ [1, 2, 3], [4, 5], [6, 7, 8, 9] ] |
然后,我们可以使用以下代码展平列表。
1 |
sum(nested_list, []) |
输出
1 |
[1, 2, 3, 4, 5, 6, 7, 8, 9] |
通过这个一维数据列表,如果您需要,可以以更直接的方式进行进一步分析。
9. 列表转字典
您是否遇到过这种情况:您有几个列表,并想将信息合并为字典格式?例如,用例可能与映射目的或特征编码有关。
在这种情况下,我们可以使用 zip
函数将我们拥有的列表转换为字典。
例如,我们有以下列表。
1 2 |
fruit = ['apple', 'banana', 'cherry'] values = [100, 200, 300] |
通过 zip 和 dict 的组合,我们可以将上面的两个列表合并为一个。
1 |
dict(zip(fruit, values)) |
输出
1 |
{'apple': 100, 'banana': 200, 'cherry': 300} |
这是一种快速将两部分数据合并为一个结构的方法,然后可用于进一步的数据预处理。
10. 字典合并
当我们有一个包含数据预处理所需信息的字典时,我们应该将它们组合起来。例如,我们已经执行了上面类似的列表到字典的操作,并得到了以下字典
1 2 |
fruit_mapping = {'apple': 100, 'banana': 200, 'cherry': 300} furniture_mapping = {'table': 100, 'chair': 200, 'sofa': 300} |
然后,我们想将它们组合起来,因为这些信息作为整体可能很重要。为此,我们可以使用以下一行代码。
1 |
{**fruit_mapping, **furniture_mapping } |
1 2 3 4 5 6 7 |
Output>> {'apple': 100, 'banana': 200, 'cherry': 300, 'table': 100, 'chair': 200, 'sofa': 300} |
如您所见,两个字典已合并为一个字典。这在许多需要聚合数据的场景中都非常有用。
结论
在本文中,我们探讨了十种不同的 Python 一行代码,它们将改进您的数据科学工作流程。这些一行代码侧重于
- 高效处理缺失数据
- 移除高度相关的特征
- 条件列应用
- 查找共同元素和不同元素
- 布尔掩码进行过滤
- 列表计数出现次数
- 从文本中提取数字
- 展平嵌套列表
- 列表转字典
- 字典合并
希望这对您有所帮助!
暂无评论。