学习Python

目录

引言

第一部分 Python基础语法

1.1 数据类型

布尔、整型、浮点型、复数、字符串、列表、元组、集合、字典

基于字符串对象的操作方法:

  • strip():去除字符串两端的空白字符,输出结果将是不包含前导和尾部空白字符的字符串。对于处理从文件读取的文本行特别有用,因为其文本行通常包含换行符或其他不需要的空白字符。

  • lstrip():用于去除字符串左侧(开头)的空白字符。

  • rstrip():用于去除字符串右侧(结尾)的空白字符。

1.2 运算符

算数运算符:+、-、*、**、/、//、%(取余数)

比较运算符:==、!=、>、<、>=

赋值运算符:=、+=,-=,*=,/=

逻辑运算符:and、or、not

布尔运算符:True、False

1.3 流程控制

顺序控制

条件控制

循环控制

-while循环

-for循环

1.4 函数

包含内置函数与自定义函数

定义函数

###语法格式:
def 函数名(参数1,参数2……)
   函数体
返回值#一般用于结束函数,可有可无,如果有返回值,则表示将相关信息携带出去,携带给调用者,如果没有返回值返回None

调用函数:

要调用函数,需要知道函数名与参数

内置函数:

  1. enumerate(): 用于在迭代过程中同时获取索引和值, 会返回一个产生元组的迭代器,其中每个元组包含两个值:索引和对应的值。
lines = ['line 1', 'line 2', 'line 3']

for index, line in enumerate(lines):
    print(f'Index: {index}, Line: {line}')
output:
Index: 0, Line: line 1
Index: 1, Line: line 2
Index: 2, Line: line 3

在上述示例中,lines 是一个包含多个字符串的列表。通过使用 enumerate(lines),我们将 lines 列表转换为一个迭代器,其中每个迭代元素都是一个包含索引和对应值的元组。

for 循环中,我们使用元组拆包将索引赋值给变量 index,将值赋值给变量 line。然后,我们可以使用这些变量来访问和操作每个元素的索引和值。

2. sorted()用于对可迭代对象进行排序操作,会返回一个新的已排序的列表,而不会修改原始的可迭代对象。

接受reversekey参数,自定义排序的方式。reverse=True参数,可以按降序进行排序。 key参数,可以指定一个函数,根据函数返回的值来进行排序。例如,key=len以字符串的长度为基准进行排序。

第二部分 Python进阶—常用工具包

模块 就好比是 工具包,要想使用这个工具包 中的工具,就需要先导入这个模块。在模块中定义的全局变量 、函数、类都是提 供给外界直接使用的 工具。

如何导入和使用Modules:

import pandas

import pandas as pd

from numpy import random

常用的Modules及功能

华中科技大学课件

2.1 Pandas

  • Pandas怎样读取数据
  • pandas的数据结构
  • Pandas查询数据的5种方法
  • pandas怎样新增数据列
  • Pandas的数据统计函数
  • Pandas对缺失值的处理
  • Pandas的settingWithCopyWarning报警
  • Pandas怎样对数据进行排序
  • Pandas字符串处理
  • Pandas的axis参数怎么理解
  • Pandas的索引Index有什么用途
  • Pandas怎样实现数据的Merge
  • Pandas实现数据Concat合并
  • Pandas批量拆分与合并Excel文件
  • Pandas怎样实现分组数据统计
  • 怎样使用Pandas的分层索引MultiIndex
  • 怎样使用Pandas的map-apply-applymap
  • Pandas怎样实现groupby每个分组的apply函数
  • Pandas使用stack和pivot实现数据透视
  • Pandas使用apply函数给表格同时添加多列
  • Pandas怎样新增数据列V2

包含了对数据库/Excel表操作的各种函数,能对txt、excel、csv等多种文件进行操作。用于数据分析,数据处理,数据可视化。

Pandas数据读取

数据类型说明Pandas读取方法
csv、tsv、txt用逗号分隔、tab分割的纯文本文件pd.read_csv
excel微软xls或者xlsx文件pd.read_excel
mysql关系型数据库表pd.read_sql
pd.read_csv()读取csv,使用默认的行标题、逗号分隔符pd.read_csv(io,sep=“,”,header=None,names=[‘’,‘’,‘’])读取txt文件,自己指定分隔符、列名,sep分隔符,header=None文件没有标题行,所以需要用names指定列标题pd.read_excel(io,sep=“,”,header=None,names=[‘’,‘’,‘’])读取Excel文件
df.head()查看前几行数据,默认为前5行df.columns查看列名列表df.shape查看 DataFrame 的形状(行数和列数
df.tail()查看后几行数据,默认为后5行df.index查看 DataFrame 的索引列(行号)http://df.info()查看 DataFrame 的整体信息

pandas数据结构:DataFrame & Series(相当于一个字典,含有索引标签与相应的值)

Series是一种类似与一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。

B站up:蚂蚁学Python

创建索引:

通过列表创建最简单的Series,默认无标签索引,也可以通过index=[]添加自定义的索引标签s1=pd.Series([])获取索引s1.index
获取数据s1.values
使用字典创建Seriess3=pd.Series(sdata)sdata={‘’:,‘’:,‘’:,}k值变成索引,value变成values

查询索引数据:类似字典dict,通过标签索引查询

dataFrame是一个表格型数据结构

  • 每列可以是不同的值类型(数值,字符串,布尔值等)
  • 既有行索引index,也有列索引columns
  • 可以被看做由Series组成的字典

创建DataFrame最常用的方法是读取源文件

也可以根据多个字典序列创建dataframe,键值就变成了列索引,值就变成了每一列的值,pd.DataFrame(输入)

从dataframe中查询series

  • 如果只查询一列、一行,返回的是pd.Series
  • 如果查询多行,多列,返回的是pd.DataFrame

Dataframe对象的操作方法:

查看 DataFrame 的基本信息访问 DataFrame 的列、行和单元格数据切片操作修改 DataFrame 的数据数据过滤和筛选写入文件
df.head():查看前几行数据,默认为前5行;df[‘Column_Name’]:访问单个列;切片选择行# 修改列名
df.rename(columns={‘Old_Name’: ‘New_Name’}, inplace=True)# 单列条件过滤
filtered_df = df[df[‘Column_Name’] > 10]df.to_excel(‘output.xlsx’, sheet_name=‘Sheet1’, index=False)
df.tail():查看后几行数据,默认为后5行;df[[‘Column1’, ‘Column2’]]:访问多个列;如果只使用单个中括号 [],则表示选择单列,并返回一个 Series 对象而不是 DataFrame。而使用双重中括号 [[‘Column1’, ‘Column2’]] 则表示选择多列,并返回一个 DataFrame。# 选择特定行范围
subset_rows = df[start_row:end_row] # 包括 start_row 和 end_row
#查询1行

df.loc[1]
#多行
df.loc[1:3]#没有逗号就表示为行
# 选择前几行
subset_rows = df.head(n)
# 选择后几行
subset_rows = df.tail(n) | # 修改行索引
df.set_index(‘Column_Name’, inplace=True) | # 多列条件过滤
filtered_df = df[(df[‘Column1’] > 10) & (df[‘Column2’] == ‘Value’)] | |
| df.shape:查看 DataFrame 的形状(行数和列数); | df.loc[row_index_label]:访问行数据(通过索引标签);
df.iloc[row_index]:访问行数据(通过行索引) | 切片选择列 | # 添加新列
df[‘New_Column’] = [value1, value2, value3, …] | # 字符串模糊匹配
filtered_df = df[df[‘Column_Name’].str.contains(‘pattern’)] | |
| df.columns:查看 DataFrame 的列名列表; | df.at[row_index,‘Column_Name’]:访问特定行和列的单元格数据 | df.columns[0::2]:获取 DataFrame df 的列标签(columns)中索引为偶数的列
# 选择特定列范围
subset_columns = df.iloc[:, start_col:end_col] # 包括 start_col 和 end_col
# 选择特定列名称
subset_columns = df[[‘Column1’, ‘Column2’, ‘Column3’]]
# 选择前几列
subset_columns = df.iloc[:, :n]
# 选择后几列
subset_columns = df.iloc[:, -n:] | # 删除列
df.drop(‘Column_Name’, axis=1, inplace=True)
如果 axis=0,则表示删除行。
如果 axis=1,则表示删除列。 | # 空值过滤
filtered_df = df[df[‘Column_Name’].isnull()] | |
| df.index:查看 DataFrame 的索引列; | | 切片选择行和列子集 | # 删除行
df.drop(row_index, inplace=True) | # 排除重复行
deduplicated_df = df.drop_duplicates() | |
| http://df.info():查看 DataFrame 的整体信息. | | # 选择特定行范围和列范围
subset_rows_columns = df.iloc[start_row:end_row, start_col:end_col] # 包括 start_row、end_row、start_col 和 end_col
# 选择特定行和列子集
subset_rows_columns = df.loc[[row1, row2, row3], [‘Column1’, ‘Column2’, ‘Column3’]] | # 修改单元格数据
df.at[row_index, ‘Column_Name’] = new_value | # 根据某一列的值进行分组
grouped_df = df.groupby(‘Column_Name’).mean() | |

pd中常用函数

函数表达式功能常用参数描述
pd.read_csv(io, sheet_name=‘Sheet2’, header=0, names=None, index_col=None, usecols=None)读取Excel,txt,csv等文件,返回的是DataFrame对象io:文件路径,远程或本地;
sheet_name:读取表中的某页,默认值为 0,表示读取第一个工作表;
header:指定作为列名的行号,默认为0表示表示使用第一行作为列名;
names:用于替换默认列名的列表。如果 header=None,则可以通过 names 参数指定列名。
index_col:指定要用作行索引的列号或列名。默认值为 None,表示不使用特定的列作为行索引,则会多输出一列索引列。其他值要加“”;
usecols:要读取的列的索引、列名或列范围。可以是单个值,也可以是列表或范围字符串。[0,1,2]表示要读取0,1,2列;
delimiter=‘,’: 将逗号 , 设置为字段分隔符。意味着 pd.read_csv() 函数将使用逗号作为字段之间的分隔符来解析 CSV 文件中的数据。sep也一样。

header :CSV 文件中包含列名的行,None表示没有列名,所有行都被解析为数据。 |
| pd.DataFrame(data=None, index=None, columns=None) | 创建一个dataframe对象,输入可以是字典,二维数组,外部文件 | data:数据输入,可以是列表、字典、NumPy 数组等。
index:行索引,用于标识每一行的名称。
columns:列标签,用于标识每一列的名称。 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |

1. 查看 DataFrame 的基本信息

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 查看前几行数据,默认为前5行
print(df.head())

# 查看后几行数据,默认为后5行
print(df.tail())

# 查看 DataFrame 的形状(行数和列数)
print(df.shape)

# 查看 DataFrame 的列标签
print(df.columns)

# 查看 DataFrame 的索引标签
print(df.index)

# 查看 DataFrame 的整体信息
print(df.info())

2. 访问 DataFrame 的列、行和单元格数据

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 访问单个列
column_data = df['Column_Name']

# 访问多个列
subset_df = df[['Column1', 'Column2']]

# 访问行数据(通过索引标签)
row_data = df.loc[row_index_label]

# 访问行数据(通过行索引)
row_data = df.iloc[row_index]

# 访问特定行和列的单元格数据
cell_data = df.at[row_index, 'Column_Name']

3. 数据过滤和筛选

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 单列条件过滤
filtered_df = df[df['Column_Name'] > 10]

# 多列条件过滤
filtered_df = df[(df['Column1'] > 10) & (df['Column2'] == 'Value')]

# 字符串模糊匹配
filtered_df = df[df['Column_Name'].str.contains('pattern')]

# 空值过滤
filtered_df = df[df['Column_Name'].isnull()]

# 排除重复行
deduplicated_df = df.drop_duplicates()

# 根据某一列的值进行分组
grouped_df = df.groupby('Column_Name').mean()

4. 修改 DataFrame 的数据

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 修改列名
df.rename(columns={'Old_Name': 'New_Name'}, inplace=True)

# 修改行索引
df.set_index('Column_Name', inplace=True)

# 添加新列
df['New_Column'] = [value1, value2, value3, ...]

# 删除列
df.drop('Column_Name', axis=1, inplace=True)

# 删除行
df.drop(row_index, inplace=True)

# 修改单元格数据
df.at[row_index, 'Column_Name'] = new_value

5. 切片操作

1. 切片选择行

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 选择特定行范围
subset_rows = df[start_row:end_row]  # 包括 start_row 和 end_row

# 选择前几行
subset_rows = df.head(n)

# 选择后几行
subset_rows = df.tail(n)

2. 切片选择列

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 选择特定列范围
subset_columns = df.iloc[:, start_col:end_col]  # 包括 start_col 和 end_col

# 选择特定列名称
subset_columns = df[['Column1', 'Column2', 'Column3']]

# 选择前几列
subset_columns = df.iloc[:, :n]

# 选择后几列
subset_columns = df.iloc[:, -n:]

3. 切片选择行和列子集

import pandas as pd

# 假设已有一个名为 df 的 DataFrame 对象

# 选择特定行范围和列范围
subset_rows_columns = df.iloc[start_row:end_row, start_col:end_col]  # 包括 start_row、end_row、start_col 和 end_col

# 选择特定行和列子集
subset_rows_columns = df.loc[[row1, row2, row3], ['Column1', 'Column2', 'Column3']]

2.2 Os

提供了与操作系统交互的功能,包括文件和目录操作、进程管理、环境变量等。

1. 文件和目录操作

# 获取当前工作目录
current_dir = os.getcwd()

# 切换工作目录
os.chdir('/path/to/directory')

# 列出目录中的文件名列表和子目录
file_list = os.listdir('/path/to/directory')

# 创建目录
os.mkdir('/path/to/directory')

# 递归创建多级目录
os.makedirs('/path/to/directory/subdirectory')

# 删除文件
os.remove('/path/to/file')

# 删除空目录
os.rmdir('/path/to/empty_directory')

# 递归删除目录及其内容
os.removedirs('/path/to/directory')

# 重命名文件或目录
os.rename('/path/to/old_name', '/path/to/new_name')

# 检查给定的字符串是否以指定的后缀结尾
filename.endswith('.txt')
# 检查给定的字符串是否以指定的前缀开头
filename.startswith('')

# 打开名为 'file.txt' 的文件,指定模式为 'r'只读模式
with open('file.txt', 'r') as file:

# 读取open()打开的文件file的内容,现在lines 列表包含了文件中的所有行
lines=file.readlines()

# 分割文件路径中的文件名和扩展名。接受一个文件路径作为输入,并返回一个包含文件名和扩展名的元组。
os.path.splitext()

2. 环境变量

# 获取环境变量的值
value = os.environ.get('VAR_NAME')

# 设置环境变量的值
os.environ['VAR_NAME'] = 'value'

# 删除环境变量
os.environ.pop('VAR_NAME')

3. 执行系统命令

# 执行系统命令
os.system('command')

# 使用子进程执行系统命令,并获取输出
output = os.popen('command').read()
函数名功能参数
os.listdir()
filename.endswith()读取具有某后缀的filiename
os.path.join(folder_path, filename)将文件路径与文件名拼接在一起
with open()

2.3 Numpy

NumPy(Numerical Python)是使用 Python进行科学计算的基础软件包 ,支持高维度数组与矩阵运算 ,针对数组运算提供大量的数学函数库 ,底层主要用 C语言编写,能够高速地执 行数值计算 , Numpy的核心是连续的多维数组。

Numpy 的优点:

  • 1、与list不同,NumPy 数组存储在内存中的一个连续位置, 因此进程可以非常有效地访问和操纵它们 ;
  • 2、NumPy (Numerical Python) 支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

与list的差别:

  • 使用 NumPy 进行列表相加,逐个对应元素相加返回一个新的数组。
  • 使用 Python 列表进行列表相加 ,list相加等同于列表串联。

ndarray:N维数组类型的对象

  • 查询数组的类型:type;
  • 获取数组中有多少元素:len / shape(形状);
  • 一维数组创建:a = np.array([1.2, 2.0, 3.0, -1.0, 2.0]) ,一个中括号表示一维;
  • 二维数组创建:A = np.array([[2.0, -1.0, 0.0, 0.0, 0.0], [-1.0, 2.0, -1.0, 0.0, 0.0], [0.0, -1.0, 2.0, -1.0, 0.0], [0.0, 0.0, -1.0, 2.0, -1.0], [0.0, 0.0, 0.0, -1.0, 2.0] ]),两个中括号表示二维;
  • 特殊矩阵创建:单位矩阵np.eye()、顺序排列矩阵np.arange().reshape()、
  • 其他创建array的方法

华中科技大学课件:其他创建array的方法

华中科技大学课件:Numpy数组对象的基本对象

数组访问与索引

  • 二维数组定位到某个元素:A[行,列]
  • 二维数组定位到某几行几列:A[:3, :3] 前三行前三列
  • 二维数组定位到第某行:A[3] 第三行
  • 布尔索引:

华科课件:Numpy数组的布尔索引

数组重塑:

华科课件:数组重塑

华科课件:数组重塑

Numpy运算:

  • Python的基本运算符在numpy数组中都能使用,+,-,*,**,/,//,%
  • 基本运算函数:函数可作用于数组内每个元素

华科课件:Numpy基本运算函数

  • Numpy向量的聚合
  • 二维数组(矩阵)的聚合
  • Axis(轴)参数沿行或列的聚合
  • 数组运算和广播机制
  • 数组点乘
  • 矩阵相乘

线性代数

  • numpy.linalg模块可以应用于线性代数
  • 矩阵求逆
  • 特征值
  • 线性方程组

2.3 Matplotlib

Python 的绘图库,包含了大量的工具 ,可以创建各种图形,包括简单的散点图, 正弦曲线,甚至是三维图形。在科学计算中,该包常被用于数据可视化。

  • Matplotlib作图元素

  • 创建figure,能控制大小,dpi=300

  • 在一个坐标系里绘制多条曲线

  • 标 题,plt.title()

  • 坐标轴,xlim 和 ylim:设定轴的范围; xlabel和 ylabel:设置轴的名称; xticks 和 yticks :设置轴的刻度

  • 标签 (label)

  • 图例 (legend)

  • 图的类型

  • 曲线图plt.plot()

  • 柱状图plt.bar()

  • 散点图plt.scatter()

  • 散点上色图# 根据各点坐标 (x,y )对应的反正切分配颜色 colour = np.arctan2(x, y) # 画图并添加颜色栏(colorbar ) plt.scatter(x, y, s=size, c=colour ) plt.colorbar()

函数表达式功能常用参数及描述
plt.scatter()绘制散点图
plt.plot()绘制曲线图

第三部分 项目实战

3.1 将txt文件转化成Excel表格

目标:

  • 将目标文件夹中的多个txt文件合并到Excel表格中;
  • 源txt文件中多余的信息删除,另存为目标txt文件;
  • txt文件转换成Excel文件之后,需要自动分列,且以文件名作为标记;

代码方案:

import os
import pandas as pd

# 文件夹路径
folder_path = 'path/to/folder'

# 输出的 Excel 文件名
output_excel = 'output.xlsx'

###############################################
#删除.txt文件中[Data]之前的内容,[Data]是我的标记行

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    if filename.endswith('.txt'):
        # 源文件路径
        source_file = os.path.join(folder_path, filename)
        # 目标文件路径
        target_file = os.path.join(folder_path, 'new_' + filename)
        # 标记行
        data_marker = '[Data]'

        # 逐行读取源文件并找到[Data]所在行
        with open(source_file, 'r') as input_file:
            lines = input_file.readlines()

            # 查找[Data]所在行
            data_line_index = None
            for index, line in enumerate(lines):
                if line.strip() == data_marker:
                    data_line_index = index
                    break

            # 如果找到[Data]所在行,则将其之后的内容写入目标文件
            if data_line_index is not None:
                lines = lines[data_line_index + 1:]

        # 将处理后的内容写入目标文件
        with open(target_file, 'w') as output_file:
            output_file.writelines(lines)

##########################################################
#分列,转换为DataFrame,输出到excel 

# 创建一个空的 DataFrame 用于存储所有文件的数据
all_data = pd.DataFrame()

# 遍历文件夹中的所有文件
for i, filename in enumerate(sorted(os.listdir(folder_path))):
    if filename.startswith('new') and filename.endswith('.txt'):
        # 拼接文件路径
        file_path = os.path.join(folder_path, filename)

        # 读取文本文件并将其转换为 DataFrame
        df = pd.read_csv(file_path, delimiter=',', header=None)

        # 删除标题栏中的文件名和空值列
        if i == 0:
            all_data[['Column1', 'Column2']] = df.iloc[:, :2]
        else:
            column_name = os.path.splitext(filename)[0]  # 获取文件名并去掉扩展名
            all_data[column_name + '_x'] = df.iloc[:, 0]
            all_data[column_name + '_y'] = df.iloc[:, 1]
            df = df.iloc[:, 2:]
            df.columns = range(df.shape[1])  # 重置列索引
            all_data = pd.concat([all_data, df], axis=1)

# 删除标题栏为0的列
all_data = all_data.loc[:, (all_data.columns != 0)]

# 将 DataFrame 写入 Excel 文件
all_data.to_excel(output_excel, index=False)

重点函数释义:

  1. os.listdir(folder_path)函数,用于返回指定目录中的文件和文件夹列表。具体而言,os.listdir() 函数接受一个字符串参数,该参数指定要列出其内容的目录路径。然后,该函数返回一个包含目录中所有文件和文件夹名称的列表。
  2. filename.startswith('new')filename.endswith('.txt'),其中filename是变量,startswith(‘new’)方法将检查该字符串是否以’new’作为前缀开始。如果是,则返回True,否则返回False。endswith(‘.txt’)方法将检查该字符串是否以’.txt’作为后缀结尾。如果是,则返回True,否则返回False。
  3. os.path.join(folder_path,filename)函数,用于将多个路径组合成一个有效的路径。
  4. pd.read_csv(file_path,delimiter=',',header=None)函数,读取的是一个逗号分隔的文本文件,将其解析为 DataFrame 对象。对于纯文本文件,通常可以使用pd.read_csv()函数来读取,即使文件的扩展名不是.csv也可以正常使用。这是因为pd.read_csv()函数的名称是基于逗号分隔值文件的历史和广泛使用,但它实际上可以处理多种分隔符的文本文件。delimiter=','用于读取分隔符。header=None 表示 CSV 文件中没有列名行。将其设置为 None 表示不将第一行数据解析为列名,而将其视为数据的一部分。
  5. append方法用于将df的行添加到all_data的末尾。ignore_index=True参数指示在合并两个 DataFrame 时重新生成索引,以避免重复的索引值。append方法返回一个新的对象,并不会修改原始对象。因此,在使用append方法时,需要将返回的结果分配给一个新的变量。append是一个常见的列表(List)和 DataFrame 操作,用于将一个对象(元素、列表、DataFrame 等)添加到另一个对象的末尾。
  6. all_data.to_excel(output_excel, index=False) 是将 DataFrame all_data 写入 Excel 文件的代码。在这行代码中,to_excel() 是 DataFrame 对象的方法,用于将数据保存为 Excel 文件。它接受一个参数 output_excel,表示要保存的 Excel 文件的路径和文件名。index=False 参数表示不将 DataFrame 的索引写入 Excel 文件中。如果将其设置为 True,则索引将作为额外的一列写入 Excel 文件。
  7. df[‘Filename’] = filename的意思是将变量filename的值赋给 DataFramedf中名为’Filename’的列。

代码解读:

在这个示例中,需要将 folder_path 替换为包含文本文件的文件夹路径,并将 output_excel 替换为希望输出的 Excel 文件名。

代码将遍历文件夹中以 “特殊字符” 开头且以 “.txt” 结尾的文件。对于每个符合条件的文件,它将读取文件内容并将其转换为 DataFrame。然后,它将文件名作为新的一列添加到 DataFrame 中,并将当前文件的数据添加到 all_data DataFrame。

最后,代码使用 Pandas 的 to_excel() 方法将 all_data DataFrame 写入 Excel 文件。

这个示例的每个文本文件中的数据都是以逗号分隔的两列。如果数据格式有所不同,需要相应地调整代码。

3.2 读取Excel数据,画图

目标:

  1. 使用Matplotlib画图,一个figure中只有一个坐标系
  2. 一个figure中有多个坐标系
  3. 添加坐标系标题,轴标题,刻度等元素,并对figure图进行美化

代码方案:

import pandas as pd
import matplotlib.pyplot as plt

# 读取Excel文件
excel_file = r"path/to/folder"
df = pd.read_excel(excel_file)
print(df)
# 获取x和y列的数据
x_columns = df.columns[::2]  # 0,2,4……偶数列为x,语法是 [start:stop:step],在这里省略了start和stop,表示从序列的起始位置到结束位置
y_columns = df.columns[1::2]  # 1,3,5……奇数列为y
x_data = df[x_columns]
y_data = df[y_columns]

# 绘制图形
plt.figure(figsize=(10, 6))  # 设置图形的大小
for i in range(len(x_columns)):
    plt.plot(x_data.iloc[:, i], y_data.iloc[:, i], label=f'Group {i+1}')#每条线的标签为‘Group 1’到‘Group n’

# 将每个列的标题名设为每条线的标签
#    x_label = x_columns[i]
#    y_label = y_columns[i]
#    plt.plot(x_data.iloc[:, i], y_data.iloc[:, i], label=f'{x_label} - {y_label}')

plt.xlabel('X')  # 设置x轴标签
plt.ylabel('Y')  # 设置y轴标签
plt.title('Data Plot')  # 设置图形标题
plt.legend()  # 添加图例
plt.grid(True)  # 添加网格线
plt.show()  # 显示图形

第四部分 Python高阶——机器学习

4.1 自然语言处理

……

索引

1. 工具库的官方网站

Pandas官方地址:

Matplotlib官方地址:

Numpy官方地址:

2. 基本概念

1. Python中基于对象的方法和函数的差别

在 Python 中,基于对象的方法和函数之间存在以下差别:

  • 定义:方法是与对象相关联的函数。它们在类中定义,并且只能通过对象进行调用。方法是类的成员,用于处理该类的数据和状态。函数是独立的代码块,可以在任何地方定义和调用。
  • **调用方式:方法通过对象进行调用,使用点号(.)将方法附加到对象上。**例如,object.method() 调用对象的方法。函数可以直接调用,通过函数名和参数来执行操作。例如,function() 调用函数。
  • 第一个参数:方法的第一个参数通常是隐式的,即方法被调用的对象本身。在方法内部,可以使用 self 或其他名称引用该对象。其他参数(如果有)则显式传递。函数的参数需要显式传递。
  • 作用域:方法是定义在类中的,因此它们具有类的命名空间和作用域。方法可以访问和操作类的属性和方法。函数则根据定义的位置和所在的命名空间来确定作用域。
  • 关联性:方法与对象之间具有关联性,因为它们可以访问和操作对象的属性和状态。方法可以修改对象的状态,并且可以访问对象的实例变量。函数则不与特定对象相关联,它们只处理传递给它们的参数。
  • 继承:方法可以继承,子类可以继承父类的方法,并在需要时进行重写。函数不能直接继承,但可以在子类中重新定义相同的函数名。

需要注意的是,方法也可以作为函数来使用,只需将方法从对象中分离出来,并将其作为函数调用。同样,可以将函数转化为方法,将其定义在类中,并将对象作为参数传递。

综上所述,方法是与对象相关联的函数,通过对象调用,具有隐式的对象参数,并可以访问和操作对象的属性和状态。函数是独立的代码块,可以在任何地方定义和调用,接受显式传递的参数。

2. 列标题与列索引的区别

在 Pandas 中,数据框(DataFrame)的列有两个相关的标识符:列标题(column label)和列索引(column index)。

  • 列标题:列标题是列的标识符,通常是作为列的名称出现的字符串。列标题可以通过 df.columns 属性访问或设置。它们提供了对列的人类可读的标识,并且可以用于引用和操作列。例如,使用 df['Column1']df.Column1 可以通过列标题访问列的数据。
  • 列索引:列索引是在数据框内部分配给列的整数标识符。**列索引是由 Pandas 自动生成的、从 0 开始的整数序列。**列索引可以通过 df.columns 属性访问。它们在内部用于引用和操作列,尤其是在使用 iloc 和其他基于位置的索引方法时。例如,使用 df.iloc[:, 0] 可以通过列索引访问第一列的数据。

3. 行索引与行标题的差别

  • 行索引:行索引是在数据框内部分配给行的整数标识符。行索引是由 Pandas 自动生成的、从 0 开始的整数序列。行索引可以通过 df.index 属性访问。它们在内部用于引用和操作行,尤其是在使用 iloc 和其他基于位置的索引方法时。
  • 行标题:行标题是行的标识符,通常是作为行的名称出现的字符串。行标题可以通过 df.index 属性访问或设置。它们提供了对行的人类可读的标识,并且可以用于引用和操作行。

以上就是“学习Python”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值