Python----数据分析(Pandas五:一维数组Series的数据可视化和其他常用方法函数)

一、数据可视化

1.1、plot

        Series.plot 方法是用来绘制Series数据的可视化图表的,该方法提供了灵活的接 口,允许用户通过不同的参数来定制图表的类型、样式、布局等,其用法与 Matplotlib中的plot相同。

Series.plot(*args, **kwargs)
描述说明
kind图表类型,可以是以下之一:
'line'折线图(默认)
'bar'柱状图
'barh'水平柱状图
'hist'直方图
'box'箱线图
'kde'核密度估计图
'area'面积图
'pie'饼图
'scatter'散点图
'hexbin'六边形箱图
axMatplotlib 轴对象,用于在指定的轴上绘制图表。如果不提供,则创建新的 轴对象。
figsize图表的尺寸,格式为 (width, height),单位为英寸。
use_index是否使用 Series 的索引作为 x 轴标签。默认为 True。
title图表的标题。
grid是否显示网格线。默认为 False。
legend是否显示图例。默认为 False。
xticksx 轴的刻度位置。
yticksy 轴的刻度位置。
xlimx 轴的范围,格式为 (min, max)。
ylimy 轴的范围,格式为 (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,则将数据分组并分别绘制每个组的直方图。
axmatplotlib的Axes对象,如果指定了,则直方图将绘制在该Axes上。
grid布尔值,默认为True,表示是否在直方图上显示网格线。
xlabelsizeint或str,用于设置x轴标签的字体大小。
xrotint或float,用于设置x轴标签的旋转角度。
ylabelsizeint或str,用于设置y轴标签的字体大小。
yrotint或float,用于设置y轴标签的旋转角度。
figsize元组,用于设置直方图的大小,格式为 (width, height)。
binsint或序列,用于设置直方图的柱子数量或具体的边界。
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)
描述说明
levelint 或 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_colsint,用于显示的最大列数。如果列数超过这个值,则显示“…”。
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

这可以是以下几种类型:

函数将此函数应用于 Series 的每个元素。
字典将 Series 中的值映射到字典的键上,返回对应的值。
Series使用另一个 Series 的索引来映射当前 Series 的值。
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)

三、思维导图 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值