[Python爬虫] Pandas模组

[Python爬虫] Pandas 模组

http://img2.58codes.com/2024/20072651kNfTvqNH3N.png

Python 的 Pandas 是一个强大的资料分析工具包,让你能够轻鬆地处理和分析结构化数据。以下是一个基本的 Pandas 教学:

1. 安装 Pandas

如果你还没有安装 Pandas,你可以通过 pip 来安装它:

pip install pandas

2. 导入 Pandas

在你的 Python 程式中,你需要先导入 Pandas:

import pandas as pd

3. 基本概念

Series: 一维阵列,类似于 Python 中的列表或 NumPy 的阵列。DataFrame: 二维的表格型数据结构,可以想象成一个 Excel 表格或 SQL 表。

Series

定义:Series 是一种一维数据结构,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。每个 Series 都会有一个数据类型来定义其值的类型。索引:Series 拥有一个索引,预设情况下从 0 开始,但也可以自定义索引的值。创建:你可以从列表、字典或直接从标量值创建 Series。
s = pd.Series([1, 3, 5, 7, 9])
操作:Series 支持多种操作,包括算术运算、聚合运算、逻辑运算等。

DataFrame

定义:DataFrame 是一种二维数据结构,类似于 Excel 表格或 SQL 数据表,可以存储不同类型的列。这是 Pandas 最常用的数据结构,适用于表示複杂数据和进行数据分析。结构:DataFrame 是由多个 Series 组成,每个 Series 成为 DataFrame 的一列。所有的列可以有不同的数据类型。索引:和 Series 一样,DataFrame 也有索引,并且每个索引值对应一行数据。同时,每一列也有标籤(列名)。创建:DataFrame 可以通过多种方式创建,包括从字典、列表的列表、Series 的字典等。
data = {    'apples': [3, 2, 0, 1],    'oranges': [0, 3, 7, 2]}df = pd.DataFrame(data)
操作:DataFrame 提供丰富的功能,包括数据过滤、排序、分组、合併以及各种数学和统计运算。

总结来说,Series 是一维的,用于存储单一列的数据,而 DataFrame 是二维的,用于存储多列数据,它们都支持大量的操作和数据处理功能,是 Python 中处理结构化数据的强大工具。

4. 创建 DataFrame

从字典列表创建

每个字典代表一行,字典的键是列名,值是数据值。

data = [    {'姓名': '小明', '年纪': 24, '工作': '工程师'},    {'姓名': '小华', '年纪': 30, '工作': '设计师'},    {'姓名': '小天', '年纪': 28, '工作': '老师'}]df = pd.DataFrame(data)df

http://img2.58codes.com/2024/20072651ctJsytbQt5.png

从列的字典创建

字典的键是列名,值是列的数据,以列表或Series形式。

data = {    'name': ['Alice', 'Bob', 'Charlie'],    'age': [24, 30, 28],    'job': ['Engineer', 'Designer', 'Teacher']}df = pd.DataFrame(data)df

http://img2.58codes.com/2024/20072651Betkg9vl4k.png

从行的列表创建

直接通过传递一个列表的列表来创建,并且可以指定列名。

rows = [    ['Alice', 24, 'Engineer'],    ['Bob', 30, 'Designer'],    ['Charlie', 28, 'Teacher']]col_names = ['name', 'age', 'job']df = pd.DataFrame(rows, columns=col_names)df

http://img2.58codes.com/2024/200726514WvVXqtbrq.png

从 Series 字典创建

每个 Series 代表一列。

s1 = pd.Series([1, 2, 3])s2 = pd.Series(['Alice', 'Bob', 'Charlie'])s3 = pd.Series([24, 30, 28])df = pd.DataFrame({'id': s1, 'name': s2, 'age': s3})df

http://img2.58codes.com/2024/20072651gFYmaaLRrU.png

这些範例涵盖了从不同数据结构创建 DataFrame 的常见情况。根据你的具体需求,你可以选择最适合你数据格式的方法。

5. DataFrame 数据型态(Data Types)

在使用 Pandas 的 DataFrame 时,了解其数据型态(data types)和常见属性是非常重要的。以下是一些基本的型态和属性介绍:
DataFrame 中的每一列(Series)可以有不同的数据型态。常见的数据型态包括:

int64: 整数型float64: 浮点数型object: 文本或混合型(通常是字符串)bool: 布林型(True 或 False)datetime64: 日期时间型timedelta[ns]: 表示两个时间之间的差category: 分类型,用于表示有限的、通常是固定不变的可能值集合

你可以用 dtypes 属性查看 DataFrame 的每列数据型态:

df.dtypes

常见属性

df.shape: 显示 DataFrame 的形状,即行数和列数。df.index: 显示 DataFrame 的索引(行标籤)。df.columns: 显示 DataFrame 的列名。df.info(): 显示 DataFrame 的摘要信息,包括列的数量、每列非空值的数量、每列的数据型态等。df.describe(): 查看数据统计摘要df.head(): 查看前几行df.size: 显示 DataFrame 中元素的总数量(行数 x 列数)。df.empty: 如果 DataFrame 为空,返回 True;否则返回 False。

下面是一个展示如何使用这些属性的例子:

# 创建一个简单的 DataFramedata = {    'Integers': [1, 2, 3],    'Floats': [0.1, 0.2, 0.3],    'Strings': ['apple', 'banana', 'cherry']}df = pd.DataFrame(data)# 使用属性print("Data Types:\n", df.dtypes)print("Shape:", df.shape)print("Index:", df.index)print("Columns:", df.columns)print("Info:", df.info())print("Describe:", df.describe())print("Head:", df.head())print("Size:", df.size)print("Is Empty:", df.empty)"""Data Types:Integers      int64Floats      float64Strings      objectdtype: objectShape: (3, 3)Index: RangeIndex(start=0, stop=3, step=1)Columns: Index(['Integers', 'Floats', 'Strings'], dtype='object')<class 'pandas.core.frame.DataFrame'>RangeIndex: 3 entries, 0 to 2Data columns (total 3 columns): #   Column    Non-Null Count  Dtype  ---  ------    --------------  -----   0   Integers  3 non-null      int64   1   Floats    3 non-null      float64 2   Strings   3 non-null      object dtypes: float64(1), int64(1), object(1)memory usage: 200.0+ bytesInfo: NoneDescribe:        Integers  Floatscount       3.0    3.00mean        2.0    0.20std         1.0    0.10min         1.0    0.1025%         1.5    0.1550%         2.0    0.2075%         2.5    0.25max         3.0    0.30Head:    Integers  Floats Strings0         1     0.1   apple1         2     0.2  banana2         3     0.3  cherrySize: 9Is Empty: False"""

透过熟悉这些型态和属性,你可以更有效地操作和分析 DataFrame 中的数据。

6. DataFrame 取得栏位资料

http://img2.58codes.com/2024/20072651Aqz8PFPDpB.png
在 Pandas 中,取得 DataFrame 中的特定栏位(列)数据可以使用多种方法。以下是一些常见的方法:

1. 通过列名取得栏位

直接使用列名作为索引可以取得该列的数据。

# 假设 df 是一个 DataFramecolumn_data = df['ColumnName']

2. 使用 . 操作符

如果列名是一个有效的 Python 变量名,也可以使用 . 来访问列。

column_data = df.ColumnName

http://img2.58codes.com/2024/20072651QXa0ixQKSL.png

3. 使用 lociloc

loc[]: 基于列的栏位名称取得列。iloc[]: 基于列的整数位置(index)来取得列。
data = [    {'姓名': '小明', '年纪': 24, '工作': '工程师'},    {'姓名': '小华', '年纪': 30, '工作': '设计师'},    {'姓名': '小天', '年纪': 28, '工作': '老师'}]df = pd.DataFrame(data)"""   姓名  年纪   工作0  小明  24  工程师1  小华  30  设计师2  小天  28   老师"""

iloc

iloc 是基于整数位置的索引,允许通过给定的位置(行数和列数)来访问 DataFrame。

语法:
DataFrame.iloc[行位置, 列位置]
位置: 整数或整数的列表/切片,从0开始索引。用法示例:
# 单个元素element = df.iloc[0, 0]  # 第一行第一列的元素# element: 小明# 某一行row = df.iloc[2]  # 第三行的所有列# 姓名    小天# 年纪    28# 工作    老师# 某几行rows = df.iloc[0:2]  # 前两行的所有列# 姓名  年纪   工作# 0  小明  24  工程师# 1  小华  30  设计师# 某几列columns = df.iloc[:, 1:3]  # 所有行的第二和第三列# 0  24  工程师# 1  30  设计师# 2  28   老师# 特定行列sub_df = df.iloc[1:3, 0:2]  # 第二到第三行和第一到第二列的子集#   姓名  年纪#1  小华  30#2  小天  28

http://img2.58codes.com/2024/20072651YQIN3DLJCO.png

loc

loc 是基于标籤名称的索引,允许通过行标籤和列名称来访问 DataFrame。

语法:
DataFrame.loc[行标籤, 列标籤]
标籤: 可以是单个标籤、标籤的列表、切片或布林阵列。用法示例:
pythonCopy code# 单个元素element = df.loc[0, '姓名']  # 标籤为 0 的行和名为 '姓名' 的列# element: 小明# 某一行row = df.loc[0]  # 标籤为 0 的行# row: # 姓名     小明# 年纪     24# 工作    工程师Name: 0, dtype: object# 某几行rows = df.loc[0:1]  # 0 到 1 的行#rows:    #   姓名  年纪   工作#0  小明  24  工程师#1  小华  30  设计师# 某几列columns = df.loc[:, ['姓名', '年纪']]  # 所有行的 '姓名' 和 '年纪'#columns:    #   姓名  年纪#0  小明  24#1  小华  30#2  小天  28# 特定行列sub_df = df.loc[1:2, '姓名':'工作']  # 特定範围的标籤行列#sub_df:   #   姓名   工作#1  小华  设计师#2  小天   老师

http://img2.58codes.com/2024/20072651zGdh8PKBHd.png

使用 lociloc 的时注意:

切片差异:iloc 在进行切片时不包含结束位置,而 loc 包含结束位置。非数字索引:当使用非数字索引时(例如字符串标籤),loc 特别有用。条件选择:loc 可以与布林条件配合使用,选择符合特定条件的行列。效率:在访问单个值或者小区域时,直接使用 ilocloc 通常更高效。但对于较大的区域或者整个行列的操作,使用条件选择或直接列名可能更好。

理解 ilocloc 的差异和适用情境,可以帮助你更加高效和準确地访问和操作 DataFrame 中的数据。

7. 增加 DataFrame 资料

增加 DataFrame 中的数据可以通过多种方式进行,包括增加列(栏位)和增加行。以下是一些常见方法:

增加列

直接赋值:如果列不存在,这将创建一个新列。

df['new_column'] = [value1, value2, value3, ...]

使用 .assign():这个方法会返回一个新的 DataFrame,不改变原来的 DataFrame。

df = df.assign(new_column=[value1, value2, value3, ...])

增加行

使用 .append():添加一行或者另一个 DataFrame 的多行。这会返回一个新的 DataFrame,不改变原来的 DataFrame。
new_row = {'column1': value1, 'column2': value2, ...}df = df.append(new_row, ignore_index=True)

如果添加的是另一个 DataFrame 的多行,可以直接将其作为 .append() 的参数。

使用 pd.concat():合併两个 DataFrame。这也是增加多行数据的有效方法。
new_df = pd.DataFrame(...)  # 新的 DataFramedf = pd.concat([df, new_df], ignore_index=True)

範例

假设我们有以下的 DataFrame,代表一些水果的库存:

data = {'apples': [3, 2], 'oranges': [4, 6]}df = pd.DataFrame(data)

增加一列「bananas」

df['bananas'] = [5, 3]  # 增加一列 bananasprint(df)

增加一行

new_row = {'apples': 7, 'oranges': 8, 'bananas': 2}df = df.append(new_row, ignore_index=True)print(df)

http://img2.58codes.com/2024/20072651uebedsozYa.png

使用这些方法,你可以轻鬆地根据需要扩展 DataFrame。记得在实际操作中,根据具体情况选择最合适的方法。

8. DataFrame 数据清理

资料清洗是数据分析中的一个重要步骤,它涉及到修正或删除错误、不完整、不相关或不準确的数据。在大多数情况下,原始数据并不完美,需要经过一系列的处理才能用于分析或建模。以下是一些常见的资料清洗步骤:

1. 去除重複数据

重複的数据会导致分析结果的偏差。

# 去除重複数据df = df.drop_duplicates()

2. 处理缺失值

缺失值可以用多种方式处理:

删除:删除含有缺失值的行或列。
# 删除含有缺失值的行df = df.dropna()# 删除含有缺失值的列,# 设置 axis 参数为 1 或 'columns' 可以删除含有缺失值的列。df = df.dropna(axis=1)# 或者df = df.dropna(axis='columns')# 只删除全部为 NaN 的行或列df_cleaned = df.dropna(how='all')# 删除非缺失值少于 2 个的行df_cleaned = df.dropna(thresh=2)

可选参数
dropna() 还提供了一些可选参数,以便更灵活地处理缺失值:
how: 'any'(默认)表示只要有缺失值就删除,'all' 表示当所有值都是缺失值时才删除。
thresh: 设置一个阈值,只有非缺失值的数量小于这个数时才删除。
subset: 在一个行或列的子集上应用这些规则。

填充:用固定值、平均数、中位数或其他算法预测的值填充缺失值。
# 使用固定值填充df = df.fillna(value)# 使用平均值填充df = df.fillna(df.mean())# 使用中位数填充df = df.fillna(df.median())# 使用众数填充df = df.fillna(df.mode().iloc[0])# 向前填充(使用前一个非缺失值填充)df = df.fillna(method='ffill')# 向后填充(使用后一个非缺失值填充)df = df.fillna(method='bfill')# 对特定列使用不同的填充值或方法。df['column_name'] = df['column_name'].fillna(specific_value)# 根据自定义函数或映射关係来填充缺失值。df = df.apply(lambda x: x.fillna(x.mean()) if x.dtype.kind in 'biufc' else x.fillna('missing'))

範例:

import pandas as pdimport numpy as npdf = pd.DataFrame({'A': [1, np.nan, 3],                   'B': [4, 5, np.nan],                   'C': [np.nan, np.nan, np.nan]})                   #使用固定值填充df_filled = df.fillna(0)#使用各列的平均值填充df_filled = df.fillna(df.mean())#向前填充df_filled = df.fillna(method='ffill')

http://img2.58codes.com/2024/200726510gvrS4jIsj.png

3. 数据类型转换

确保每列数据的类型正确。例如,将数字被错误地读取为字符串,或将日期读取为字符串等。

# 1. 转换为字符串,使用 astype(str) 可将列转换为字符串类型。df['column'] = df['column'].astype(str)# 2. 转换为数值,使用 pd.to_numeric() 可将列转换为数值型。df['column'] = pd.to_numeric(df['column'], errors='coerce')# errors='coerce' 会将无法转换的值设为 NaN。# 3. 转换为整数,使用 astype(int) 或 astype('int64') 可将列转换为整数型。df['column'] = df['column'].astype(int)# 4. 转换为浮点数,使用 astype(float) 可将列转换为浮点型。df['column'] = df['column'].astype(float)# 5. 转换为日期时间,使用 pd.to_datetime() 可将列转换为日期时间型。df['column'] = pd.to_datetime(df['column'])# 6. 转换为类别型,使用 astype('category') 可将列转换为类别型,适用于有限且重複的字符串。df['column'] = df['column'].astype('category')

範例:

df = pd.DataFrame({'A': ['1', '2', '3'],                   'B': ['1.1', '2.2', '3.3'],                   'C': ['2021-01-01', '2021-01-02', '2021-01-03'],                   'D': ['apple', 'banana', 'cherry']})df['A'] = df['A'].astype(int)  # 字符串转整数df['B'] = df['B'].astype(float)  # 字符串转浮点数df['C'] = pd.to_datetime(df['C'])  # 字符串转日期df['D'] = df['D'].astype('category')  # 字符串转类别型               

http://img2.58codes.com/2024/20072651xoqrrTr8W2.png

通过这些方法,你可以根据分析需求对 DataFrame 中的数据类型进行转换,以确保数据的準确性和适用性。

4. 修正数据错误

修正明显的数据错误,比如负的年龄、错误的邮政编码等。

# 1. 替换值,使用 replace() 函数可以替换 DataFrame 中的特定值。df['column'] = df['column'].replace(错误值, 正确值)# 2. 条件赋值,使用条件表达式对特定条件下的值进行修正。df.loc[df['column'] > 阈值, 'column'] = 新值# 3. 使用函数修正,对列应用自定义函数来修正错误的数据。df['column'] = df['column'].apply(lambda x: 函数(x))# 4. 正则表达式,对字符串类型的数据,可以使用正则表达式来修正。df['column'] = df['column'].str.replace(正则表达式, 新值, regex=True)# 5. 使用其他列的数据修正,基于同一行的其他列的数据来修正某列的错误值。df['column'] = df.apply(lambda row: 函数(row), axis=1)

範例:

df = pd.DataFrame({'Age': [29, -1, 0, 25, 120],                   'Salary': ['10000$', '9000$', '8000$', '7000$', '6000$'],                   'Name': ['Alice', 'Bob', '', 'Charlie', 'David']})# 修正年龄df.loc[df['Age'] < 0, 'Age'] = df['Age'].median()df.loc[df['Age'] > 100, 'Age'] = df['Age'].median()# 修正薪水格式df['Salary'] = df['Salary'].str.replace('$', '').astype(int)# 修正空名字df['Name'] = df['Name'].replace('', 'Unknown')

http://img2.58codes.com/2024/200726518rFAnw2oog.png

透过这些方法,你可以有效地修正 DataFrame 中的错误数据,提高数据质量,为后续的分析工作打下坚实的基础。

DataFrame 资料合併

在 Pandas 中,资料合併是将不同的数据集根据某些规则合併在一起。这类似于 SQL 或其他数据库语言中的 join 操作。Pandas 提供了多种合併数据的方法,包括:

1. concat()

pd.concat() 用于沿一个轴将多个对象堆叠在一起。它主要用于合併具有相同列的数据框架,或者相同行的情况。

用法:
pd.concat([df1, df2, ...], axis=0, join='outer')
参数:objs: 一个序列或映射,包含你想要合併的 pandas 对象。axis: {0/'index', 1/'columns'}, 预设为 0。沿着哪个轴进行合併。join: {'inner', 'outer'}, 预设为 'outer'。如何处理除连接轴以外的轴上的索引。

2. merge()

merge() 类似于 SQL 中的 JOIN 操作,它可以让你沿一个或多个键合併两个数据框架。

用法:
pd.merge(left, right, how='inner', on=None)
参数:left: 一个 DataFrame。right: 另一个 DataFrame。on: 用于连接的列名。必须在左右 DataFrame 对象中找到。how: {‘left’, ‘right’, ‘outer’, ‘inner’}, 预设为 'inner'。决定了合併的方式。

3. join()

join() 是在索引上合併。它是 merge() 的一个方便的方法,用于在列上合併,但通过索引来合併。

用法:
df1.join(df2)
参数:通常情况下,join() 会将另一个 DataFrame 的列加入到一个 DataFrame 中,主要是基于索引。

範例:

假设我们有两个 DataFrame:df1 和 df2。

# 创建两个 DataFramedf1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],                    'B': ['B0', 'B1', 'B2']},                   index=['K0', 'K1', 'K2'])df2 = pd.DataFrame({'C': ['C0', 'C2', 'C3'],                    'D': ['D0', 'D2', 'D3']},                   index=['K0', 'K2', 'K3'])# concatresult1 = pd.concat([df1, df2], axis=1)  # 沿着列合併# mergeresult2 = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')  # 基于索引进行内连接# joinresult3 = df1.join(df2)  # df1 作为主DataFrame,将 df2 合併进来print(result1)print(result2)print(result3)

http://img2.58codes.com/2024/20072651wDU9K4utEG.png

通过了解这些方法的不同用途和特点,你可以根据具体需求选择最适合的资料合併方式。

9. 档案处理

在 Pandas 中,数据读取是一个基本且常用的操作,用于将各种格式的数据文件读入为 DataFrame。Pandas 支持多种数据源和文件格式,包括 CSV、Excel、SQL 数据库等。以下是一些最常用的数据读取方法:

1. 读取 CSV 文件

CSV (Comma-Separated Values) 是一种常见的文件格式,用于存储表格数据。

函数:
pd.read_csv(filepath_or_buffer, sep=',', ...)
参数:filepath_or_buffer: 文件的路径或类似的对象。sep: 字段分隔符号,默认为 ','。

2. 读取 Excel 文件

Excel 文件是办公自动化中常见的数据存储格式。

函数:
pd.read_excel(io, sheet_name=0, ...)
参数:io: Excel 文件的路径或文件对象。sheet_name: 要读取的工作表名称或索引,预设为第一个工作表。

3. 读取 SQL 数据库

从 SQL 数据库中读取数据需要一个有效的 SQL 查询和一个数据库连接。

函数:
pd.read_sql(sql, con, ...)
参数:sql: SQL 查询字符串或SQLAlchemy Selectable。con: 数据库连接对象。

4. 读取 JSON 文件

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。

函数:
pd.read_json(path_or_buf, ...)
参数:path_or_buf: JSON 文件的路径或类似的对象。

範例:

假设你有一个名为 "data.csv" 的 CSV 文件,以下是如何读取它:

import pandas as pd# 读取 CSV 文件df = pd.read_csv('data.csv')# 现在 df 是一个 DataFrame 对象,包含了 CSV 文件中的数据

当读取数据时,根据文件的特点和数据的结构,你可能需要设置额外的参数,如指定分隔符号、设定无数据时的填充值、选择特定的列等。

掌握这些基本的数据读取方法,可以帮助你灵活地从不同的数据源导入数据,为进一步的数据处理和分析打下基础。

10.Pandas 图表

在 Pandas 中,DataFrame 提供了方便的方法直接使用 Matplotlib 库绘制图表,例如线图、直方图、散点图等。这使得在探索性数据分析阶段快速绘製图形变得相当简单。

1. plot() 方法

Pandas 中的 .plot() 方法是基于 Matplotlib 开发的,它提供了多种参数来自定义图表。

plot() 是一个通用的绘图函数,用于创建各种类型的图表,如线图、柱状图、面积图、散点图等。通过设置 kind 参数,可以改变图表类型。例如,kind='line' 用于线图,kind='bar' 用于柱状图。plot() 提供了丰富的参数用于自定义图表,例如设置标题、轴标籤、颜色、大小等。适用于需要展示数据趋势、比较、分布等多种情境。

以下是一些常用的 .plot() 参数及其介绍:

基本参数

kind: 字符串,指定图表的类型。常见的值包括 'line'(线图)、'bar'(柱状图)、'barh'(横向柱状图)、'hist'(直方图)、'box'(箱形图)、'kde' 或 'density'(核密度估计)、'area'(面积图)、'pie'(饼图)、'scatter'(散点图)等。x, y: 用于指定作为 x 轴和 y 轴的列名。对于某些图表类型(如散点图)是必要的。figsize: 元组,指定图表的大小,格式为 (宽度, 高度)use_index: 布林值,默认为 True。决定是否使用 DataFrame 的索引作为 x 轴。title: 字符串,图表的标题。grid: 布林值,指定是否显示网格线。legend: 布林值,指定是否显示图例。style: 字符串或字符串列表,定义线条的风格(仅对线图有效)。

高级参数

stacked: 布林值,对于柱状图和面积图,决定是否堆叠数据。

subplots: 布林值,如果设为 True,则每列数据将画在不同的子图上。

layout: 元组,指定子图的排列方式,格式为 (行数, 列数)

sharex, sharey: 布林值,决定是否共享 x 轴或 y 轴。

colormap: 用于定义图表颜色的 Colormap 对象或颜色映射名称。

color: 指定线条或柱状的颜色。

fontsize: 数字,指定轴标籤的字体大小。

用法:

df.plot(x='x_column', y='y_column', kind='line')
参数:kind: 图的类型,默认为 'line'。可以是 'line', 'bar', 'barh', 'hist', 'box', 'kde', 'area', 'pie', 'scatter', 'hexbin' 等。x, y: 分别表示横轴和纵轴的列名。

1. 简单的线图

最基本的 .plot() 使用,无需额外参数,默认创建线图。

範例:
import pandas as pdimport numpy as np# 创建示例数据df = pd.DataFrame(np.random.randn(10, 2), columns=['A', 'B'])# 绘製线图df.plot()
参数介绍:无需任何参数,默认将 DataFrame 的索引用作 x 轴,所有列作为 y 轴。

http://img2.58codes.com/2024/20072651AjrX4c4oSV.png

2. 散点图(带有标题和轴标籤)

使用 kind 参数创建散点图,并添加标题和轴标籤。

範例:
# 绘製散点图df.plot(x='A', y='B', kind='scatter', title='Scatter Plot', xlabel='Column A', ylabel='Column B')
参数介绍:x, y: 指定 x 轴和 y 轴的列。kind='scatter': 指定图表类型为散点图。title: 图表的标题。xlabel, ylabel: x 轴和 y 轴的标籤。

http://img2.58codes.com/2024/20072651WXGx0OVWVn.png

3. 柱状图(带有颜色、图例和累积选项)

进阶使用,创建带有多个定制选项的柱状图。

範例:
# 增加一列作为示例df['C'] = np.random.randn(10)# 绘製柱状图df.plot(kind='bar', stacked=True, color=['red', 'blue', 'green'], legend=True, title='Bar Chart')
参数介绍:kind='bar': 指定图表类型为柱状图。stacked=True: 指定柱状图为堆叠式。color: 指定每列的颜色。legend: 是否显示图例。title: 图表的标题。

http://img2.58codes.com/2024/20072651UUd9aYlC8B.png

通过这些範例,你可以看到 .plot() 方法的多样性和灵活性。根据你的数据和需求,可以进行多种自定义设置,创建各式各样的图表。

2. hist() 直方图

hist() 是专门用于绘製直方图的函数。直方图用于展示数据的分布情况,尤其是单个变量的分布。

hist() 会自动将数据分组(通常称为「桶」或「bin」),并计算每个分组中的观察次数。

虽然 plot() 也可以通过设置 kind='hist' 来绘製直方图,但 hist() 提供了更专门化的选项,如自动分桶、密度估计等。

适用于需要快速理解单个变量的分布特性时。

用法:

df['column'].hist(bins=10)
参数:bins: 直方图的条形数量,即分组数量。
import pandas as pdimport numpy as np# 创建示例数据df = pd.DataFrame(np.random.randn(10, 1), columns=['A'])df['A'].plot(kind='hist') # 绘製直方图df['A'].hist(bins=10)  # 直接绘製直方图,指定桶数为 10

http://img2.58codes.com/2024/20072651RV4ee0WYHs.png

3. scatter() 散点图

.scatter() 专用于绘製散点图,显示两个变量之间的关係。

它需要指定 x 和 y 轴的数据列,通常用于探索不同变量之间的关联性或数据的分布特徵。

用法:

df.plot(x='column1', y='column2', kind='scatter')  # 使用 plot 方法绘製散点图# 或df.plot.scatter(x='column1', y='column2')  # 直接使用 scatter 方法
参数:x, y: 分别表示横轴和纵轴的列名。
import pandas as pdimport numpy as np# 创建示例数据df = pd.DataFrame(np.random.randn(10, 2), columns=['column1', 'column2'])df.plot(x='column1', y='column2', kind='scatter')  # 使用 plot 方法绘製散点图# 或df.plot.scatter(x='column1', y='column2')  # 直接使用 scatter 方法

http://img2.58codes.com/2024/20072651hRZox1jN2l.png

注意事项:

确保在使用这些方法之前已经导入了 matplotlib 库,因为 Pandas 的绘图功能是建立在 Matplotlib 之上的。使用这些绘图方法时,可以通过添加额外的 matplotlib 函数进行自定义,例如设置标题、轴标籤等。对于更複杂的视觉化需求,可能需要直接使用 Matplotlib 或其他专业绘图库(如 Seaborn 或 Plotly)。

通过这些基本的绘图方法,你可以快速对 DataFrame 中的数据进行视觉化,以帮助理解数据的特徵和关係。

以下是一个关于 Pandas DataFrame 常用绘图方法的表格,包括每个方法的名称、说明及範例:

图表方法说明範例plot()绘製线图或通过kind参数绘製其他图表df.plot(x='x_column', y='y_column', kind='line')hist()绘製直方图,显示单变量的分布情况df['column'].hist(bins=10)scatter()绘製散点图,观察两个变量之间的关係df.plot(x='x_column', y='y_column', kind='scatter')bar()绘製柱状图,比较不同项目的大小df.plot(kind='bar')box()绘製箱形图,显示数据的分布统计df.plot(kind='box')area()绘製面积图,通常用于表示累计数据df.plot(kind='area')pie()绘製饼图,显示各部分佔比df.plot(kind='pie', y='column')

在使用这些方法时,一般会需要指定 x 轴和 y 轴对应的列名(除了 hist()pie() 等特殊情况)。此外,这些方法均可通过添加额外的 Matplotlib 参数进行自定义,例如设置图表的大小、颜色、标题等。这些基本的绘图方法可以帮助快速理解和呈现数据。

结论

Pandas 是一个功能强大的数据处理工具,非常适合用于处理各类型的数据问题,成为数据处理的得力助手。虽然它的上手难度相对较高,但透过持续的练习和应用,可以逐步掌握其精髓。对于那些未来有志于使用 Python 进行人工智慧相关开发的学习者来说,Pandas 是一个不可或缺的模组。它不仅提升数据分析效率,也是构建高效 AI 模型的基石。

Python基础系列文章

分享所学贡献社会
[Python教学]开发工具介绍
[开发工具] Google Colab 介绍
[Python教学] 资料型态
[Python教学] if判断式
[Python教学] List 清单 和 Tuple元组
[Python教学] for 和 while 迴圈
[Python教学] Dictionary 字典 和 Set 集合
[Python教学] Function函示
[Python教学] Class 类别
[Python教学] 例外处理
[Python教学] 档案存取
[Python教学] 实作密码产生器
[Python教学] 日期时间
[Python教学] 套件管理

Python 爬虫系列文章

[Python爬虫] 网路爬虫
[Python爬虫] 分析目标网站
[Python爬虫] 发送请求与解析网站内容
[Python爬虫] Requests 模组
[Python爬虫] Beautiful Soup 模组
[Python爬虫] Selenium 模组
[Python爬虫] Pandas模组

订阅免费电子报

我们推出电子报拉,欢迎大家订阅免费电子报,会接收到分享的程式文章,
透过阅读文章,今天比昨天进步一点,每天的一小步,就是未来的一大步。
订阅免费电子报
Facebook 粉丝页 - TechMasters 工程师养成记
程式教育 - 工程师养成记
同步分享到部落格


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章