Pandas Series深度解析:数据可视化与常用函数实战指南
一、数据可视化
1.1、plot
Series.plot 方法是用来绘制Series数据的可视化图表的,该方法提供了灵活的接 口,允许用户通过不同的参数来定制图表的类型、样式、布局等,其用法与 Matplotlib中的plot相同。
Series.plot(*args, **kwargs)
描述 | 说明 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind | 图表类型,可以是以下之一:
|
||||||||||||||||||||
ax | Matplotlib 轴对象,用于在指定的轴上绘制图表。如果不提供,则创建新的 轴对象。 | ||||||||||||||||||||
figsize | 图表的尺寸,格式为 (width, height),单位为英寸。 | ||||||||||||||||||||
use_index | 是否使用 Series 的索引作为 x 轴标签。默认为 True。 | ||||||||||||||||||||
title | 图表的标题。 | ||||||||||||||||||||
grid | 是否显示网格线。默认为 False。 | ||||||||||||||||||||
legend | 是否显示图例。默认为 False。 | ||||||||||||||||||||
xticks | x 轴的刻度位置。 | ||||||||||||||||||||
yticks | y 轴的刻度位置。 | ||||||||||||||||||||
xlim | x 轴的范围,格式为 (min, max)。 | ||||||||||||||||||||
ylim | y 轴的范围,格式为 (min, max)。 | ||||||||||||||||||||
color | 绘制颜色,可以是单个颜色或颜色列表。 | ||||||||||||||||||||
label | 图例标签 |
1.2、hist
用于绘制Series数据直方图的方法。这个方法提供了多种参数来定制直方图的外观和 样式。
Series.hist(by=None, ax=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, figsize=None, bins=10, backend=None, legend=False, **kwargs)
描述 | 说明 |
---|---|
by | 如果不是None,则将数据分组并分别绘制每个组的直方图。 |
ax | matplotlib的Axes对象,如果指定了,则直方图将绘制在该Axes上。 |
grid | 布尔值,默认为True,表示是否在直方图上显示网格线。 |
xlabelsize | int或str,用于设置x轴标签的字体大小。 |
xrot | int或float,用于设置x轴标签的旋转角度。 |
ylabelsize | int或str,用于设置y轴标签的字体大小。 |
yrot | int或float,用于设置y轴标签的旋转角度。 |
figsize | 元组,用于设置直方图的大小,格式为 (width, height)。 |
bins | int或序列,用于设置直方图的柱子数量或具体的边界。 |
backend | 用于指定绘图后端,通常Pandas会使用matplotlib。 |
legend | 布尔值,默认为False,表示是否在直方图上显示图例。 |
**kwargs | 其他关键字参数,将被传递给matplotlib的 hist函数。 |
1.3、绘图集合
1.3.1、准备工作
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
s = pd.Series([1, 3, 2, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
1.3.2、绘制折线图
plt.figure(figsize=(8, 4))
plt.plot(s.index, s.values, marker='o', color='r', linestyle='--', linewidth=2)
plt.title('折线图', fontsize=14)
plt.xlabel('索引', fontsize=12)
plt.ylabel('值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
1.3.3、绘制柱状图
plt.figure(figsize=(8, 4))
plt.bar(s.index, s.values, color='b', alpha=0.7)
plt.title('柱状图', fontsize=14)
plt.xlabel('索引', fontsize=12)
plt.ylabel('值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
1.3.4、绘制散点图
plt.figure(figsize=(8, 4))
plt.scatter(s.index, s.values, color='g', s=100) # s为点的大小
plt.title('散点图', fontsize=14)
plt.xlabel('索引', fontsize=12)
plt.ylabel('值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
1.3.5、绘制直方图
plt.figure(figsize=(8, 4))
plt.hist(s.values, bins=3, alpha=0.7, color='purple', edgecolor='black')
plt.title('直方图', fontsize=14)
plt.xlabel('值', fontsize=12)
plt.ylabel('频率', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
1.3.6、绘制箱线图
plt.figure(figsize=(8, 4))
plt.boxplot(s, patch_artist=True, boxprops=dict(facecolor='orange'), medianprops=dict(color='black'))
plt.title('箱线图', fontsize=14)
plt.ylabel('值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
二、其他常用方法
2.1、 unique
该函数用于返回 Series 中的唯一值。这个方法返回一个数组,其中包含了 Series 中 所有唯一的值。数组中的值是按照它们在原始 Series 中首次出现的顺序排列的。
Series.unique()
import pandas as pd
# 创建一个 Series
s = pd.Series(['apple', 'banana', 'apple', 'orange', 'banana', 'banana'])
# 获取唯一值
unique_values = s.unique()
# 输出唯一值
print(unique_values)
print(type(unique_values))
print(len(unique_values))
num = s.nunique()
print(num)
2.2、 nunique
该函数用于计算 Series 中唯一值的数量。这个方法返回一个整数,表示 Series 中唯 一值的数量。
Series.nunique(dropna=True)
描述 | 说明 |
---|---|
dropna | 布尔值,默认为 True。如果为 True,则在计算唯一值数量之前,会 先从 Series 中排除 NaN 值。 |
import pandas as pd
# 创建一个 Series
s = pd.Series(['apple', 'banana', 'apple', 'orange', 'banana', 'banana'])
# 计算唯一值的数量(排除 NaN)
unique_count = s.nunique(dropna=True)
# 输出唯一值的数量
print(unique_count)
2.3、 value_counts
该方法用于计算 Series 中每个值的出现次数。这个方法返回一个包含每个唯一值及 其对应出现次数的 Series。
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
描述 | 说明 |
---|---|
normalize | 布尔值或 ‘all’,默认为 False。如果为 True,返回每个值的相对频 率;如果为 ‘all’,则返回所有值的相对频率之和为 1。 |
sort | 布尔值,默认为 True。如果为 True,结果将按计数值降序排序。 |
ascending | 布尔值,默认为 False。如果为 True,结果将按计数值升序排 序。 |
bins | 用于离散化连续数据,可以是整数或分位数数组。如果指定了 果将是每个 bin 的计数。 |
dropna | 布尔值,默认为 True。如果为True,则排除 NaN 值。 |
import pandas as pd
# 创建一个 Series
s = pd.Series(['apple', 'banana', 'apple', 'orange', 'banana', 'banana'])
# 计算每个值的出现次数
value_counts = s.value_counts(ascending=True)
# 输出每个值的出现次数
print(value_counts)
2.4、 describe
该方法用于生成描述性统计信息。这个方法返回一个包含计数、均值、标准差、最小 值、25% 分位数、中位数、75% 分位数和最大值的 Series。
Series.describe(percentiles=None, include=None, exclude=None)
描述 | 说明 |
---|---|
percentiles | 数值列表或数值元组,默认为 [.25, .5, .75],表示要包含在输 出中的分位数。 |
include | 字符串或类型列表,用于指定要包括在结果中的数据类型。默认为 None,即包括所有数字类型。 |
exclude | 字符串或类型列表,用于指定要从结果中排除的数据类型。默认为 None。 |
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 生成描述性统计信息
description = s.describe()
# 输出描述性统计信息
print(description)
2.5、 copy
该函数用于创建 Series 对象的一个副本。
Series.copy(deep=True)
描述 | 说明 |
---|---|
deep | 布尔值,默认为 True。当 deep=True 时,会进行深拷贝,即复制数据和 索引的副本,而不是仅仅复制引用。当 deep=False 时,会进行浅拷贝,即只复 制数据或索引的引用。 |
import pandas as pd
# 创建一个 Series
original_series = pd.Series([1, 2, 3, 4, 5])
# 创建一个深拷贝
deep_copied_series = original_series.copy()
# 创建一个浅拷贝
shallow_copied_series = original_series.copy(deep=False)
# 修改深拷贝中的数据
deep_copied_series[0] = 999
# # 输出原始 Series 和深拷贝后的 Series
# print("Original Series:\n", original_series)
# print("Deep Copied Series:\n", deep_copied_series)
# 修改浅拷贝中的数据
shallow_copied_series[1] = 888
# 输出原始 Series 和浅拷贝后的 Series
print("Original Series after shallow copy modification:\n", original_series)
print("Shallow Copied Series:\n", shallow_copied_series)
2.6、 reset index
该函数用于重置 Series 的索引,将原来的索引转换为一个列,并将一个新的默认整 数索引赋给 Series。
Series.reset_index(level=None, *, drop=False, name=no_default, inplace=False, allow_duplicates=False)
描述 | 说明 |
---|---|
level | int 或 level 名,可选。如果 Series 是多级索引(MultiIndex),则只移除 指定的级别。默认为 None,移除所有级别。 |
drop | 布尔值,默认为 False。如果为 True,则不将旧索引添加为新列,直接丢 弃。 |
name | 字符串,可选。用于新列的名称,默认为 no_default。如果未指定,并且 索引有名字,则使用索引的名字。 |
inplace | 布尔值,默认为 False。如果为 True,则在原地修改 Series,不返回新 的对象。 |
allow_duplicates | 布尔值,默认为 False。如果为 True,则允许在重置索引后 出现重复的索引值。默认情况下,如果出现重复的索引值,Pandas 会抛出错 误,对Series无用。 |
import pandas as pd
import numpy as np
# 创建一个简单的Series对象
data = pd.Series(np.random.randint(1, 100, 5), index=['c', 'a', 'e', 'b', 'd'])
# 对Series进行排序
sorted_series = data.sort_values()
# 重置索引
reset_indexed_series = sorted_series.reset_index(drop=False)
print("排序后的Series:")
print(sorted_series)
print("重置索引后的Series:")
print(reset_indexed_series)
2.7、 info
用于显示Series的概要信息的方法。这个方法提供了关于Series的元数据,包括数据 类型、非空值的数量、内存使用情况等。
Series.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=True)
描述 | 说明 |
---|---|
verbose | 布尔值或None,默认为None。如果为True,则输出更详细的信息。 |
buf | 一个文件-like对象,如果提供,则将输出写入这个对象而不是标准输出。 |
max_cols | int,用于显示的最大列数。如果列数超过这个值,则显示“…”。 |
memory_usage | 布尔值或str,默认为None。如果为True,则显示内存使用情 况。如果设置为’deep’,则会计算列的内存使用情况,这可能非常慢。 |
show_counts | 布尔值,默认为True。如果为True,则显示非空值的数量。 |
import numpy as np
import pandas as pd
# 创建一个示例Series
s = pd.Series([1, 2, np.nan, 4, 5], name='example_series', index=['a', 'b', 'c', 'd', 'e'])
# 显示Series的概要信息
print(s.info())
2.8、 apply
对 Series 中的每个元素应用一个函数,并返回一个结果 Series。
Series.apply(func, convert_dtype=True, args=(), **kwargs)
描述 | 说明 |
---|---|
func | 一个函数,它将被应用到 Series 的每一个元素上。这个函数可以是 Python 的内置函数,也可以是用户自定义的函数。 |
convert_dtype | 布尔值,默认为True。如果为True,则在可能的情况下, Pandas 会尝试将结果转换为适合的数据类型。 |
args | 一个元组,包含传递给 func 的位置参数。 |
**kwargs | 一个字典,包含传递给 True,则在可能的情况下, func的关键字参数。 |
import pandas as pd
# 创建一个Series
series = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
# 使用 apply 方法结合 lambda 函数,对 series 中的每个元素执行平方操作
res = series.apply(lambda x: x ** 2)
# 打印结果,输出每个元素的平方值
print(res)
2.9、 map
对 Series 中的每个元素应用Series 的每个一个映射,它允许你将一个函数应用到 元素上,或者将一个字典或 Series 映射到 Series.map(arg, na_action=None) Series 的值上。
Series.map(arg, na_action=None)
描述 | 说明 | ||||||
---|---|---|---|---|---|---|---|
arg |
这可以是以下几种类型:
|
||||||
na_action | 默认为 None。如果设置为 ‘ignore’,并且 arg 是一个函数,那么 将忽略 NaN 值,并保留它们不变。 |
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])
# 定义一个函数,用于将值翻倍
def double(x):
return x * 2
# 使用 map 方法应用这个函数
s_doubled = s.map(double)
print(s_doubled)
import pandas as pd
# 创建一个映射字典
grade_mapping = {
90: 'A',
80: 'B',
70: 'C',
60: 'D',
0: 'F'
}
# 创建一个成绩的 Series
grades = pd.Series([80, 92, 77, 80, 100])
# 使用 map 方法应用这个字典
grades_mapped = grades.map(grade_mapping)
print(grades_mapped)
import pandas as pd
# 创建一个名为series1的Series对象
series1 = pd.Series([50, 60, 70, 80, 90], index=['a', 'b', 80, 'd', 'e'])
# 创建一个名为grades的Series对象,代表成绩数据
grades = pd.Series([80, 92, 77, 59, 100], index=[0, 1, 2, 3, 4])
print(series1)
print(grades)
# 使用grades的map方法,将grades中的每个值作为键,去series1中查找对应的键值并返回
res = grades.map(series1)
# 打印输出新生成的Series对象res
print(res)
三、思维导图
作者:蹦蹦跳跳真可爱589