每个初学者都应了解的十大熊猫功能

蟒蛇, 2024 年 12 月 19 日5 分钟阅读

Pandas 是数据分析师和 Python 程序员进入数据处理和分析领域的首选库。其直观的语法和强大的数据结构使处理庞大的数据集不仅易于管理,而且高效。无论您是导入 CSV 文件、清理杂乱的数据集还是分析数据趋势,Pandas 都能为您提供所需的工具。

如果您刚刚开始 Pandas 学习之旅,这篇文章将向您介绍每个初学者都应掌握的10 个基本函数和方法。这些函数将帮助您轻松加载、检查、清理和分析数据。
以下是每个方法及其作用的简要介绍:

  • read_csv():将 CSV 文件中的数据加载到 Pandas DataFrame 中。
  • head():显示 DataFrame 的前几行。
  • info():提供 DataFrame 的简明摘要,包括列类型和缺失值。
  • describe():生成数字列的描述性统计。
  • isnull():识别数据帧中的缺失数据。
  • dropna():删除缺失数据的行或列。
  • fillna():用指定值替换缺失数据。
  • groupby():根据一列或多列对数据进行分组,并应用聚合函数。
  • sort_values():按一列或多列对 DataFrame 排序。
  • 应用():对 DataFrame 的行或列应用自定义函数。

先决条件

首先,确保您的计算机上安装了 Python。如果没有,可以从 以下链接下载。
设置好 Python 后,确认是否安装了 Pandas 库。如果没有,可以使用以下命令轻松添加:

pipinstallpandas

我们将使用以下房地产虚拟数据集来举例说明:

属性 ID地点卧室浴室价格平方尺上市日期
101纽约3275000018002023-05-15
102旧金山2185000014002023-06-01
103洛杉矶4325002023-04-10
104芝加哥326500001700
105迈阿密54120000035002023-03-22
106休斯敦4345000020002023-07-01

十大 Pandas 函数和方法

1. read_csv():将 CSV 文件中的数据加载到 Pandas DataFrame 中。

使用 pandas 的第一步是加载数据,为处理或分析做好准备。将数据导入 pandas DataFrame 的最常用方法之一是read_csv()函数。

代码示例:

importpandasaspd
# 将数据集加载到 Pandas DataFrame 中
file_path ="real_estate_listings.csv" # 替换为实际文件路径

# 创建数据帧
df = pd.read_csv(file_path)

首先,我们导入 pandas 库。使用 作为 pd 是开发人员简化代码的常用惯例。例如,不用写 pandas.read_csv()我们只需使用 pd.read_csv(),使代码更加简洁易读。

接下来,指定要加载到 Pandas DataFrame 中的 CSV 文件的路径。然后,创建一个变量并使用 read_csv 方法将文件加载到 DataFrame 中。

关键参数:

现在,让我们来探讨一下这种方法的一些重要参数:

  • 分隔符: 指定 CSV 文件中使用的分隔符(如 ,,, ;, \t)。
df= pd.read_csv(file_path, delimiter=',')
  • index_col:在我们的表格中,每个物业列表都由" "中的 ID 标识。属性 ID"列。为确保 pandas 将此列用作每个属性的唯一标识符,我们可以显式地将其设置为 ID 列。否则,pandas 将自动生成并为每个列表分配自己的 ID 值。
df= pd.read_csv(file_path, index_col='PropertyID')
  • 用量:如果您的 CSV 文件包含许多列,但您只需要选择其中的几列,pandas 允许您使用特定参数轻松实现这一目标。
df= pd.read_csv(file_path, usecols=['Location','Price','Bedrooms'])

2. head() 和 tail():检查数据

既然数据已经加载到 DataFrame 中,我们就可以开始探索它了。为此,Pandas 提供了两种非常方便的方法: head()tail().这些方法对于快速检查数据集的第一行或最后几行至关重要。

  • head():该方法默认显示数据集的前 5 行。该方法对于验证数据是否已正确加载以及检查数据结构特别有用。
  • tail():该方法的工作原理与 head() 类似,但显示的是最后几行。它有助于检查数据集的末尾,尤其是在检查数据是否完整或尾部记录是否有缺失值时。

代码示例:

# 查看前 5 行
print(df.head())
# 查看最后 3 行
print(df.tail(3))

输出 head():

属性 ID地点卧室浴室价格平方尺上市日期
101纽约3275000018002023-05-15
102旧金山2185000014002023-06-01
103洛杉矶4325002023-04-10
104芝加哥326500001700
105迈阿密54120000035002023-03-22

输出 tail():

属性 ID地点卧室浴室价格平方尺上市日期
104芝加哥326500001700
105迈阿密54120000035002023-03-22
106休斯敦4345000020002023-07-01

3. info() - 理解数据帧结构

info()函数提供 DataFrame 的简明摘要。它包括以下详细信息

  • 行数和列数。
  • 列名及其数据类型
  • 每列中的非空值计数。

这种方法有助于快速了解数据集的结构,发现缺失值或数据类型不正确等问题。

代码示例:

# 获取数据帧的简明摘要
print(df.info())

上述代码的输出结果如下

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 7 columns):
#   Column          Non-Null Count  Dtype 
---  ------          --------------  ----- 
0   PropertyID      6 non-null      int64 
1   Location        6 non-null      object
2   Bedrooms        6 non-null      int64 
3   Bathrooms       6 non-null      int64 
4   Price           5 non-null      float64
5   SquareFootage   6 non-null      int64 
6   ListingDate     5 non-null      object
dtypes: float64(1), int64(4), object(2)
memory usage: 464.0+ bytes

4. describe():生成统计摘要

"(《世界人权宣言》) describe() 该方法提供了关键统计指标的快速汇总,如 吝啬, 标准差, 百分位数等等。默认情况下 describe() 可处理数值数据,也可处理分类数据,根据数据类型提供定制的见解。

关键参数:

  • 百分位数:一个介于 0 和 1 之间的数字列表,用于指定要返回的百分位数。默认值为 "无",即返回第 25、50 和 75 百分位数。更多信息 这里.
  • 包括:要包含在摘要中的数据类型列表。可以指定 int、float、object(字符串)等数据类型。默认值为 "无",即包含所有数字类型。
  • 排除:要从摘要中排除的数据类型列表。该参数也是 默认情况下,不排除任何类型。

代码示例:

打印(df.describe())

代码输出如下

       PropertyID位置 卧室 ...         价格 平方英尺 上市日期
计数 6.000000 6 6.000000... 5.000000e+00 6.000000 5
uniqueNaN6NaN ...           NaN NaN5
顶部NaN 纽约 NaN ...           NaN NaN2023-05-15
freqNaN1NaN ...           NaN NaN1
平均值 103.500000NaN 3.500000... 7.800000e+05 2150.000000NaN
1.870829NaN1.048809...2.774887e+05 755.645419NaN
最小值 101.000000NaN 2.000000... 4.500000e+05 1400.000000NaN
25% 102.250000NaN 3.000000... 6.500000e+05 1725.000000NaN
50% 103.500000NaN 3.500000... 7.500000e+05 1900.000000NaN
75% 104.750000NaN 4.000000... 8.500000e+05 2375.000000NaN
最大值 106.000000NaN 5.000000... 1.200000e+06 3500.000000NaN

各项统计数据的解释

  • 计数:每列不遗漏条目的数量。
    • 例如 计数 = 6 对于 卧室表示所有行都有有效数据。
  • 平均值:列的平均值。
    • 例如 平均值 = 3.5 对于 卧室表明平均 3.5 个卧室 每处房产。
  • 标准:标准偏差:标准偏差显示数值与平均值的差值。
    • 例如 std = 1.048809 对于 卧室这意味着卧室数量的差异不大。
  • 最小/最大:最小值和最大值。
    • 例如 最小值 = 2最大值 = 5 对于 卧室.
  • 25%、50%、75%(四分位数):表示数据的分布:
    • 25%:25%的数据低于该值(第一四分位数)。
    • 50%:中位值。
    • 75%:75%的数据低于该值(第三四分位数)。

isnull():识别缺失数据

"(《世界人权宣言》) isnull() 函数可帮助识别 DataFrame 中的缺失数据。它返回一个与原始数据形状相同的 DataFrame,并带有 正确 数据缺失  和 假的 否则。它通常与其他功能一起使用,如 和() 来计算各列或各行的缺失值。

代码示例:

# 识别缺失
print(df.isnull())
# 统计每列的缺失
print(df.isnull().sum())

df.isnull() 输出:

  属性 ID  地点  卧室  浴室  价格  平方英尺  上市日期
0                                           错误
1                                           
2                                            错误
3                                            
4                 错误      错误                    错误
5                                           

df.isnull().sum() 输出:

物业编号 0
位置 0
卧室 0
浴室 0
价格 1
平方英尺 0
上市日期 1
dtype: int64

6. dropna():删除缺失数据

"(《世界人权宣言》) dropna() 功能移除 行数专栏 有缺失数据  的数据。默认情况下,它会删除有任何缺失值的行。您可以自定义其行为,以便只删除列,或删除全部或特定子集值缺失的行/列

代码示例:

#删除  缺失 值的记录
df_dropped_rows = df.dropna()
print(df_dropped_rows)

#删除 缺失 值的列
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)

下面是删除所有 行数 载有 价值观

属性 ID地点卧室浴室价格平方尺上市日期
101纽约3275000018002023-05-15
102旧金山2185000014002023-06-01
105迈阿密54120000035002023-03-22
106休斯敦4345000020002023-07-01

下面是数据帧,其中包含 专栏 载有 值删除。

属性 ID地点卧室浴室平方尺
101纽约321800
102旧金山211400
103洛杉矶432500
104芝加哥321700
105迈阿密543500
106休斯敦432000

7. fillna():替换缺失数据

"(《世界人权宣言》) fillna() 函数替换缺失数据 的指定值。pandas dropna() 方法可以有效地处理和删除 DataFrame 中的空值,而 fillna() 该方法为替换 值与您选择的指定值进行比较。这种方法提供了一种管理缺失数据的灵活方法,使您可以使用一个固定值(即 吝啬, 中位數, 模式或其他计算统计数据。

代码示例:

# 用平均价格填补 "价格 "列中的缺失值 df['Price'] = 
df['Price'].fillna(df['Price'].mean()) 
print(df)

代码的输出显示 值已成功替换为平均价格。

属性 ID地点卧室浴室价格平方尺上市日期
101纽约3275000018002023-05-15
102旧金山2185000014002023-06-01
103洛杉矶4378000025002023-04-10
104芝加哥326500001700
105迈阿密54120000035002023-03-22
106休斯敦4345000020002023-07-01

"(《世界人权宣言》) 上市日期 列还包含一个 值。我们不需要进行计算,只需使用一个占位符,如"未知.下面介绍如何做到这一点;

# 使用占位符填充 "ListingDate "列中的缺失值
df['ListingDate'] =df['ListingDate'].fillna('Unknown')
print(df)

数据帧现在看起来如下:

属性 ID地点卧室浴室价格平方尺上市日期
101纽约3275000018002023-05-15
102旧金山2114002023-06-01
103洛杉矶4378000025002023-04-10
104芝加哥326500001700未知
105迈阿密54120000035002023-03-22
106休斯敦4345000020002023-07-01

8. groupby():分组和汇总数据

Pandas 中的groupby()函数是一个功能强大的通用工具,可根据一列或多列将 DataFrame 分成若干组,从而实现高效的数据分析和聚合。
它的工作原理是分割-应用-合并
,首先将数据分割成组;
,然后对每个组应用指定的函数;
,最后将结果合并成一个新的 DataFrame。
这种精简的方法简化了复杂的数据处理任务,提高了分析效率。

代码示例:

例如,您可以按地点计算房产的平均价格,或按卧室类别统计房源数量。

# "地点 " 分组 计算平均价格
avg_price_by_location = df.groupby('Location')['Price'].mean()
print(avg_price_by_location)
# "卧室 " 分组 计算总面积
total_sqft_by_bedrooms = df.groupby('Bedrooms')['SquareFootage'].sum()
print(total_sqft_by_bedrooms)
#按多列 分组 计算计数
count_by_location_bedrooms = df.groupby(['Location','Bedrooms']).size()
print(count_by_location_bedrooms)

各地平均价格:

地点
芝加哥 650000.0
休斯顿 450000.0
洛杉矶
迈阿密 1200000.0
纽约 750000.0
旧金山 850000.0
名称:价格, 类型: float64

卧室总面积:

卧室
2    1400
3    3500
4    4500
5    3500

按地点和卧室计数:

地点卧室
芝加哥 3 1
休斯顿 4 1
洛杉矶 4 1
迈阿密 5 1
纽约 3 1
旧金山 2 1
dtype: int64

9. sort_values():对数据排序

sort_values()函数用于按一列或多列对 DataFrame 进行升序或降序排序。排序对于数据排序、识别极端(如价格最高的房产)或简单地组织数据集以提高可读性至关重要。

代码示例:

# 按 "价格 "降序排序
df_sorted_by_price = df.sort_values(by='Price',ascending=False)
print(df_sorted_by_price)
# 按 "地点 "升序排序
df_sorted_by_location = df.sort_values(by='Location')
print(df_sorted_by_location)
# 按多列排序:首先按 "卧室"(升序),然后按 "价格"(降序)。
df_sorted_by_bedrooms_price = df.sort_values(by=['Bedrooms','Price'], ascending=[True,False])
print(df_sorted_by_bedrooms_price)

按价格排序(降序):

  PropertyID位置 卧室 ...      价格 平方英尺 上市日期
4 105迈阿密5... 1200000.0 3500 2023-03-22
1 102旧金山2...  850000.0 1400 2023-06-01
0 101纽约3...  750000.0 1800 2023-05-15
3 104芝加哥3...  650000.0 1700NaN
5 106休斯顿4...  450000.0 2000 2023-07-01
2 103洛杉矶4...        无2500 2023-04-10

按地点排序(升序):

[6 行 x 7 列]
  物业编号 位置 卧室 ...      价格 平方英尺 上市日期
3 104 芝加哥 3 . ..   650000.0 1700 NaN
5 106 Houston 4 . ..   450000.0 2000 2023-07-01
2 103 洛杉矶 4 . ..        无 2500 2023-04-10
4 105 迈阿密 5 . ..  1200000.0 3500 2023-03-22
0 101 纽约 3 . ..   750000.0 1800 2023-05-15
1 102 旧金山 2 . ..   850000.0 1400 2023-06-01

按卧室(升序)和价格(降序)排序:

  PropertyID位置 卧室 ...      价格 平方英尺 上市日期
1 102旧金山2...  850000.0 1400 2023-06-01
0 101纽约3...  750000.0 1800 2023-05-15
3 104芝加哥3...  650000.0 1700NaN
5 106休斯顿4...  450000.0 2000 2023-07-01
2 103洛杉矶4...        无2500 2023-04-10
4 105迈阿密5... 1200000.0 3500 2023-03-22

10. apply():对数据应用自定义函数

通过apply()函数,可以对 DataFrame 中的行或列应用自定义函数。这是一种功能强大的方法,可用于执行超出 Pandas 内置函数范围的元素变换、计算或条件操作。

代码示例:

举个例子,我们要创建一个新列来计算每平方英尺的价格。

#定义一个自定义函数 计算平方英尺的价格
def price_per_sqft(price, sqft):
  returnprice/sqft if sqft!= 0 else 0

# 应用自定义函数 创建 新列
df['PricePerSqFt']=df.apply(lambdarow: price_per_sqft(row['Price'],row['SquareFootage']),axis=1)
print(df)

以下是上述代码的输出结果:

  PropertyID位置 卧室 ...  平方英尺 上市日期 每平方英尺价格
0 101New York3...          1800 2023-05-15 416.666667
1 102旧金山2...          1400 2023-06-01 607.142857
2 103洛杉矶4...2500 2023-04-103 104芝加哥3...          1700NaN382.352941
4 105迈阿密5...          3500 2023-03-22 342.857143
5 106休斯顿4...2000 2023-07-01 225.000000

另一个例子是将地点名称转换为大写字母;

# 应用转换,将所有地点名称大写
df['Location'] =df['Location'].apply(lambda x: x.upper())
print(df)

这就是它的外观:

   PropertyID位置 卧室 ...      价格 平方英尺 上市日期
0 101New York3...  750000.0 1800 2023-05-15
1 102旧金山2...  850000.0 1400 2023-06-01
2 103洛杉矶4...        无2500 2023-04-10
3 104芝加哥3...  650000.0 1700NaN
4 105迈阿密5... 1200000.0 3500 2023-03-22
5 106休斯顿4...  450000.0 2000 2023-07-01

结论

在本指南中,我们探讨了用于数据分析的 10 个基本 Pandas 函数,从使用 read_csv()info() 使用以下方法对其进行清洁和改造 isnull(), fillna()应用().这些功能构成了任何数据分析工作流程的基础,使您能够有效地清理、处理和汇总数据集。掌握了它们,您就能自信地应对现实世界中的数据挑战。今天就开始练习,探索这些工具如何简化你的分析任务!