Skip to content

Latest commit

 

History

History
234 lines (167 loc) · 7.61 KB

numpy-with-pandas-for-more-efficient-data-analysis.md

File metadata and controls

234 lines (167 loc) · 7.61 KB

NumPy 与 Pandas 结合以更高效的数据分析

原文:www.kdnuggets.com/numpy-with-pandas-for-more-efficient-data-analysis

NumPy 与 Pandas 结合以更高效的数据分析图像由 jcomp 提供,来源 Freepik

作为一个数据从业者,Pandas 是任何数据操作活动的首选包,因为它直观且易于使用。这就是为什么许多数据科学教育课程在学习课程中包括 Pandas 的原因。


我们的前三个课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业生涯。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你所在的组织的 IT


Pandas 是建立在 NumPy 包上的,特别是 NumPy 数组。许多 NumPy 函数和方法仍然与它们兼容,因此我们可以使用 NumPy 有效地提升 Pandas 数据分析。

这篇文章将探讨几个示例,说明 NumPy 如何帮助我们提高 Pandas 数据分析的体验。

让我们深入了解一下。

使用 NumPy 改进 Pandas 数据分析

在继续教程之前,我们应该安装所有必要的软件包。如果尚未安装,你可以使用以下代码来安装 Pandas 和 NumPy。

pip install pandas numpy

我们可以首先解释 Pandas 和 NumPy 之间的联系。如上所述,Pandas 建立在 NumPy 包上。让我们看看它们如何相互补充,以改进我们的数据分析。

首先,让我们尝试使用相应的软件包创建一个 NumPy 数组和 Pandas DataFrame。

import numpy as np
import pandas as pd

np_array= np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pandas_df = pd.DataFrame(np_array, columns=['A', 'B', 'C'])

print(np_array)
print(pandas_df)
Output>>
[[1 2 3]
 [4 5 6]
 [7 8 9]]
   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

如上面的代码所示,我们可以使用具有相同维度结构的 NumPy 数组来创建 Pandas DataFrame。

接下来,我们可以在 Pandas 数据处理和清理步骤中使用 NumPy。例如,我们可以使用 NumPy 的 NaN 对象作为缺失数据的占位符。

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [5, np.nan, np.nan, 3, 2],
    'C': [1, 2, 3, np.nan, 5]
})
print(df)
Output>>
    A    B    C
0  1.0  5.0  1.0
1  2.0  NaN  2.0
2  NaN  NaN  3.0
3  4.0  3.0  NaN
4  5.0  2.0  5.0

如上面的结果所示,NumPy 的 NaN 对象在 Pandas 中成为任何缺失数据的同义词。

这段代码可以检查每个 Pandas DataFrame 列中的 NaN 对象数量。

df.isnull().sum() 
Output>>
A    1
B    2
C    1
dtype: int64

数据收集者可能会将 DataFrame 列中的缺失数据值表示为字符串。如果发生这种情况,我们可以尝试用 NumPy 的 NaN 对象替换该字符串值。

df['A'] = df['A'].replace('missing data'', np.nan)

NumPy 还可以用于异常值检测。让我们看看如何做到这一点。

df = pd.DataFrame({
    'A': np.random.normal(0, 1, 1000),
    'B': np.random.normal(0, 1, 1000)
})

df.loc[10, 'A'] = 100
df.loc[25, 'B'] = -100

def detect_outliers(data, threshold=3):
    z_scores = np.abs((data - data.mean()) / data.std())
    return z_scores > threshold

outliers = detect_outliers(df)
print(df[outliers.any(axis =1)])
Output>>
            A           B
10  100.000000    0.355967
25    0.239933 -100.000000

在上面的代码中,我们使用 NumPy 生成随机数,然后创建一个使用 Z-score 和 sigma 规则检测离群值的函数。结果是包含离群值的 DataFrame。

我们可以使用 Pandas 进行统计分析。NumPy 可以帮助在聚合过程中实现更高效的分析。例如,这是使用 Pandas 和 NumPy 进行的统计聚合。

df = pd.DataFrame({
    'Category': [np.random.choice(['A', 'B']) for i in range(100)],
    'Values': np.random.rand(100)
})

print(df.groupby('Category')['Values'].agg([np.mean, np.std, np.min, np.max]))
Output>>
             mean       std      amin      amax
Category                                        
A         0.524568  0.288471  0.025635  0.999284
B         0.525937  0.300526  0.019443  0.999090

使用 NumPy,我们可以将统计分析函数应用于 Pandas DataFrame,并获得类似上述输出的汇总统计信息。

最后,我们将讨论使用 Pandas 和 NumPy 的矢量化操作。矢量化操作是一种同时对数据执行操作的方法,而不是逐个循环执行。结果将更快且内存优化。

例如,我们可以使用 NumPy 在 DataFrame 列之间执行逐元素加法操作。

data = {'A': [15,20,25,30,35], 'B': [10, 20, 30, 40, 50]}

df = pd.DataFrame(data)
df['C'] = np.add(df['A'], df['B'])  

print(df)
Output>>
   A   B   C
0  15  10  25
1  20  20  40
2  25  30  55
3  30  40  70
4  35  50  85

我们还可以通过 NumPy 数学函数转换 DataFrame 列。

df['B_exp'] = np.exp(df['B'])
print(df)
Output>>
   A   B   C         B_exp
0  15  10  25  2.202647e+04
1  20  20  40  4.851652e+08
2  25  30  55  1.068647e+13
3  30  40  70  2.353853e+17
4  35  50  85  5.184706e+21

还可以使用 NumPy 对 Pandas DataFrame 进行条件替换。

df['A_replaced'] = np.where(df['A'] > 20, df['B'] * 2, df['B'] / 2)
print(df)
Output>>
   A   B   C         B_exp  A_replaced
0  15  10  25  2.202647e+04         5.0
1  20  20  40  4.851652e+08        10.0
2  25  30  55  1.068647e+13        60.0
3  30  40  70  2.353853e+17        80.0
4  35  50  85  5.184706e+21       100.0

这些是我们探索的所有示例。这些 NumPy 函数无疑会帮助改善你的数据分析过程。

结论

本文讨论了 NumPy 如何通过 Pandas 帮助提高高效的数据分析。我们尝试了数据预处理、数据清理、统计分析和使用 Pandas 和 NumPy 的矢量化操作。

希望这对你有所帮助!

Cornellius Yudha Wijaya**** 是一位数据科学助理经理和数据撰写者。在全职工作于印尼安联时,他喜欢通过社交媒体和写作分享 Python 和数据技巧。Cornellius 撰写了各种 AI 和机器学习主题。

更多相关内容