目录
引言
第一部分 Python基础语法
1.1 数据类型
布尔、整型、浮点型、复数、字符串、列表、元组、集合、字典
基于字符串对象的操作方法:
-
strip()
:去除字符串两端的空白字符,输出结果将是不包含前导和尾部空白字符的字符串。对于处理从文件读取的文本行特别有用,因为其文本行通常包含换行符或其他不需要的空白字符。 -
lstrip()
:用于去除字符串左侧(开头)的空白字符。 -
rstrip()
:用于去除字符串右侧(结尾)的空白字符。
1.2 运算符
算数运算符:+、-、*、**、/、//、%(取余数)
比较运算符:==、!=、>、<、>=
赋值运算符:=、+=,-=,*=,/=
逻辑运算符:and、or、not
布尔运算符:True、False
1.3 流程控制
顺序控制
条件控制
循环控制
-while循环
-for循环
1.4 函数
包含内置函数与自定义函数
定义函数
###语法格式:
def 函数名(参数1,参数2……)
函数体
返回值#一般用于结束函数,可有可无,如果有返回值,则表示将相关信息携带出去,携带给调用者,如果没有返回值返回None
调用函数:
要调用函数,需要知道函数名与参数
内置函数:
- 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()
用于对可迭代对象进行排序操作,会返回一个新的已排序的列表,而不会修改原始的可迭代对象。
接受reverse
和key
参数,自定义排序的方式。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 | ||
使用字典创建Series | s3=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)
重点函数释义:
os.listdir(folder_path)
函数,用于返回指定目录中的文件和文件夹列表。具体而言,os.listdir() 函数接受一个字符串参数,该参数指定要列出其内容的目录路径。然后,该函数返回一个包含目录中所有文件和文件夹名称的列表。filename.startswith('new')
和filename.endswith('.txt')
,其中filename是变量,startswith(‘new’)方法将检查该字符串是否以’new’作为前缀开始。如果是,则返回True,否则返回False。endswith(‘.txt’)方法将检查该字符串是否以’.txt’作为后缀结尾。如果是,则返回True,否则返回False。os.path.join(folder_path,filename)
函数,用于将多个路径组合成一个有效的路径。pd.read_csv(file_path,delimiter=',',header=None)
函数,读取的是一个逗号分隔的文本文件,将其解析为 DataFrame 对象。对于纯文本文件,通常可以使用pd.read_csv()函数来读取,即使文件的扩展名不是.csv也可以正常使用。这是因为pd.read_csv()函数的名称是基于逗号分隔值文件的历史和广泛使用,但它实际上可以处理多种分隔符的文本文件。delimiter=','用于读取分隔符。header=None 表示 CSV 文件中没有列名行。将其设置为 None 表示不将第一行数据解析为列名,而将其视为数据的一部分。append
方法用于将df
的行添加到all_data
的末尾。ignore_index=True
参数指示在合并两个 DataFrame 时重新生成索引,以避免重复的索引值。append
方法返回一个新的对象,并不会修改原始对象。因此,在使用append
方法时,需要将返回的结果分配给一个新的变量。append
是一个常见的列表(List)和 DataFrame 操作,用于将一个对象(元素、列表、DataFrame 等)添加到另一个对象的末尾。all_data.to_excel(output_excel, index=False)
是将 DataFrameall_data
写入 Excel 文件的代码。在这行代码中,to_excel()
是 DataFrame 对象的方法,用于将数据保存为 Excel 文件。它接受一个参数output_excel
,表示要保存的 Excel 文件的路径和文件名。index=False
参数表示不将 DataFrame 的索引写入 Excel 文件中。如果将其设置为True
,则索引将作为额外的一列写入 Excel 文件。- 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数据,画图
目标:
- 使用Matplotlib画图,一个figure中只有一个坐标系
- 一个figure中有多个坐标系
- 添加坐标系标题,轴标题,刻度等元素,并对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必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。