
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 | 纽约 | 3 | 2 | 750000 | 1800 | 2023-05-15 |
| 102 | 旧金山 | 2 | 1 | 850000 | 1400 | 2023-06-01 |
| 103 | 洛杉矶 | 4 | 3 | 2500 | 2023-04-10 | |
| 104 | 芝加哥 | 3 | 2 | 650000 | 1700 | |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
| 106 | 休斯敦 | 4 | 3 | 450000 | 2000 | 2023-07-01 |
使用 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'])
既然数据已经加载到 DataFrame 中,我们就可以开始探索它了。为此,Pandas 提供了两种非常方便的方法: head() 和 tail().这些方法对于快速检查数据集的第一行或最后几行至关重要。
# 查看前 5 行
print(df.head())
# 查看最后 3 行
print(df.tail(3))
输出 head():
| 属性 ID | 地点 | 卧室 | 浴室 | 价格 | 平方尺 | 上市日期 |
| 101 | 纽约 | 3 | 2 | 750000 | 1800 | 2023-05-15 |
| 102 | 旧金山 | 2 | 1 | 850000 | 1400 | 2023-06-01 |
| 103 | 洛杉矶 | 4 | 3 | 2500 | 2023-04-10 | |
| 104 | 芝加哥 | 3 | 2 | 650000 | 1700 | |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
输出 tail():
| 属性 ID | 地点 | 卧室 | 浴室 | 价格 | 平方尺 | 上市日期 |
| 104 | 芝加哥 | 3 | 2 | 650000 | 1700 | |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
| 106 | 休斯敦 | 4 | 3 | 450000 | 2000 | 2023-07-01 |
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
"(《世界人权宣言》) 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%:25%的数据低于该值(第一四分位数)。50%:中位值。75%:75%的数据低于该值(第三四分位数)。 "(《世界人权宣言》) 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
"(《世界人权宣言》) dropna() 功能移除 行数 或 专栏 有缺失数据 无 的数据。默认情况下,它会删除有任何缺失值的行。您可以自定义其行为,以便只删除列,或删除全部或特定子集值缺失的行/列
#删除 有 缺失 值的记录
df_dropped_rows = df.dropna()
print(df_dropped_rows)
#删除 缺失 值的列
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)
下面是删除所有 行数 载有 无 价值观
| 属性 ID | 地点 | 卧室 | 浴室 | 价格 | 平方尺 | 上市日期 |
| 101 | 纽约 | 3 | 2 | 750000 | 1800 | 2023-05-15 |
| 102 | 旧金山 | 2 | 1 | 850000 | 1400 | 2023-06-01 |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
| 106 | 休斯敦 | 4 | 3 | 450000 | 2000 | 2023-07-01 |
下面是数据帧,其中包含 专栏 载有 无 值删除。
| 属性 ID | 地点 | 卧室 | 浴室 | 平方尺 |
| 101 | 纽约 | 3 | 2 | 1800 |
| 102 | 旧金山 | 2 | 1 | 1400 |
| 103 | 洛杉矶 | 4 | 3 | 2500 |
| 104 | 芝加哥 | 3 | 2 | 1700 |
| 105 | 迈阿密 | 5 | 4 | 3500 |
| 106 | 休斯敦 | 4 | 3 | 2000 |
"(《世界人权宣言》) fillna() 函数替换缺失数据 无 的指定值。pandas dropna() 方法可以有效地处理和删除 DataFrame 中的空值,而 fillna() 该方法为替换 无 值与您选择的指定值进行比较。这种方法提供了一种管理缺失数据的灵活方法,使您可以使用一个固定值(即 吝啬, 中位數, 模式或其他计算统计数据。
# 用平均价格填补 "价格 "列中的缺失值 df['Price'] =
df['Price'].fillna(df['Price'].mean())
print(df)
代码的输出显示 无 值已成功替换为平均价格。
| 属性 ID | 地点 | 卧室 | 浴室 | 价格 | 平方尺 | 上市日期 |
| 101 | 纽约 | 3 | 2 | 750000 | 1800 | 2023-05-15 |
| 102 | 旧金山 | 2 | 1 | 850000 | 1400 | 2023-06-01 |
| 103 | 洛杉矶 | 4 | 3 | 780000 | 2500 | 2023-04-10 |
| 104 | 芝加哥 | 3 | 2 | 650000 | 1700 | 无 |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
| 106 | 休斯敦 | 4 | 3 | 450000 | 2000 | 2023-07-01 |
"(《世界人权宣言》) 上市日期 列还包含一个 无 值。我们不需要进行计算,只需使用一个占位符,如"未知.下面介绍如何做到这一点;
# 使用占位符填充 "ListingDate "列中的缺失值
df['ListingDate'] =df['ListingDate'].fillna('Unknown')
print(df)
数据帧现在看起来如下:
| 属性 ID | 地点 | 卧室 | 浴室 | 价格 | 平方尺 | 上市日期 |
| 101 | 纽约 | 3 | 2 | 750000 | 1800 | 2023-05-15 |
| 102 | 旧金山 | 2 | 1 | 无 | 1400 | 2023-06-01 |
| 103 | 洛杉矶 | 4 | 3 | 780000 | 2500 | 2023-04-10 |
| 104 | 芝加哥 | 3 | 2 | 650000 | 1700 | 未知 |
| 105 | 迈阿密 | 5 | 4 | 1200000 | 3500 | 2023-03-22 |
| 106 | 休斯敦 | 4 | 3 | 450000 | 2000 | 2023-07-01 |
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
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
通过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-10无
3 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().这些功能构成了任何数据分析工作流程的基础,使您能够有效地清理、处理和汇总数据集。掌握了它们,您就能自信地应对现实世界中的数据挑战。今天就开始练习,探索这些工具如何简化你的分析任务! 应用()