0


【Python】Pandas简要教程

文章目录

一、简介

  1. Pandas

是一个用于数据操作和分析的开源 Python 库。它提供了高效的数据结构和数据分析工具,特别适合处理结构化数据(如表格数据)。Pandas 在

  1. 数据清洗、预处理、统计分析、数据可视化

等方面有广泛的应用。

Github:https://github.com/pandas-dev/pandas

User Guide:https://pandas.pydata.org/docs/user_guide/index.html

主要特点:

  1. 易用的数据结构:- Series:一维数组,类似于 Python 的列表或字典。- DataFrame:二维数据结构,类似于 Excel 表格或 SQL 表。
  2. 数据操作:- 支持对数据进行增删改查操作。- 提供丰富的数据清洗和预处理功能,包括缺失值处理、数据过滤、分组、聚合等。- 支持多种数据格式的读写,如 CSV、Excel、SQL、JSON 等。
  3. 高效的性能:- 基于 NumPy 实现,具有高效的计算性能。- 支持多种加速库,如 Dask、Modin,可以在大数据处理时提升性能。
  4. 数据可视化:- 与 Matplotlib、Seaborn 等可视化库无缝集成,方便生成各种类型的图表。

二、Pandas基本数据结构及其方法

2.1 Series

  1. pd.Series

是Pandas库中的一种基本数据结构,用于表示一维的带标签数组。它既可以包含整数、浮点数、字符串等数据类型,也可以包含其他Python对象。

可以通过多种方式创建一个Series:

  1. import pandas as pd
  2. # 通过列表创建
  3. s = pd.Series([1,3,5,7,9])# 通过字典创建
  4. data ={'a':1,'b':3,'c':5}
  5. s = pd.Series(data)# 通过标量创建(指定索引)
  6. s = pd.Series(5, index=['a','b','c','d'])

单从这里看,Series是具有列表或字典的特性的。

🟢Series 属性:
属性说明例index返回或设置Series的索引s.index = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]values返回Series中的数据(不包含索引)s.valuesname返回或设置Series的名称s.name = ‘my_series’dtype返回Series的数据类型s.dtype
🟢Series 方法:

(1)基本方法
方法功能描述示例代码

  1. head(n)

返回前

  1. n

个元素,默认返回前5个

  1. s.head(3)
  1. tail(n)

返回后

  1. n

个元素,默认返回后5个

  1. s.tail(3)
  1. shape

返回Series的形状(元素个数)

  1. s.shape
  1. index

返回Series的索引标签

  1. s.index
  1. values

返回Series的值(不包含索引)

  1. s.values
  1. dtypes

返回Series的数据类型

  1. s.dtypes

(2)数据选择与操作
方法功能描述示例代码

  1. loc[]

按标签选择元素

  1. s.loc['a']
  1. iloc[]

按位置选择元素

  1. s.iloc[0]
  1. at[]

快速访问单个元素(标签方式)

  1. s.at['a']
  1. iat[]

快速访问单个元素(位置方式)

  1. s.iat[0]
  1. drop(labels)

删除指定的元素

  1. s.drop('a')
  1. rename()

重命名索引标签

  1. s.rename({'a': 'alpha'})
  1. replace()

替换指定的值

  1. s.replace(10, 100)
  1. map()

对Series中的每个元素应用函数或映射

  1. s.map(lambda x: x * 2)
  1. apply(func)

对Series中的每个元素应用函数

  1. s.apply(lambda x: x + 1)

(3)数据聚合与统计
方法功能描述示例代码

  1. sum()

计算Series中所有元素的和

  1. s.sum()
  1. mean()

计算Series中所有元素的均值

  1. s.mean()
  1. median()

计算Series中所有元素的中位数

  1. s.median()
  1. mode()

计算Series中所有元素的众数

  1. s.mode()
  1. std()

计算Series中所有元素的标准差

  1. s.std()
  1. var()

计算Series中所有元素的方差

  1. s.var()
  1. count()

计算Series中非NA/null值的数量

  1. s.count()
  1. min()

计算Series中所有元素的最小值

  1. s.min()
  1. max()

计算Series中所有元素的最大值

  1. s.max()

(4) 处理缺失值
方法功能描述示例代码

  1. isna()

检测缺失值(NA/null)

  1. s.isna()
  1. notna()

检测非缺失值

  1. s.notna()
  1. fillna(value)

用指定值填充缺失值

  1. s.fillna(0)
  1. dropna()

删除包含缺失值的元素

  1. s.dropna()

2.2 DataFrame

  1. pandas.DataFrame

是Pandas库中最重要的数据结构之一,主要用于表示二维的数据表格。它可以看作是由多个

  1. Series

构成的字典,每个

  1. Series

表示DataFrame的一列。以下是有关

  1. DataFrame

的详细介绍:

**可以通过多种方式创建一个

  1. DataFrame

:**

  1. 通过字典创建data ={'name':['Alice','Bob','Charlie'],'age':[25,30,35],'city':['New York','San Francisco','Los Angeles']}df = pd.DataFrame(data)
  2. 通过列表的列表创建data =[['Alice',25,'New York'],['Bob',30,'San Francisco'],['Charlie',35,'Los Angeles']]columns =['name','age','city']df = pd.DataFrame(data, columns=columns)
  3. 通过字典的字典创建data ={'name':{'0':'Alice','1':'Bob','2':'Charlie'},'age':{'0':25,'1':30,'2':35},'city':{'0':'New York','1':'San Francisco','2':'Los Angeles'}}df = pd.DataFrame(data)
  4. 通过numpy数组创建data = np.array([['Alice',25,'New York'],['Bob',30,'San Francisco'],['Charlie',35,'Los Angeles']])df = pd.DataFrame(data, columns=['name','age','city'])

输出:

  1. name age city
  2. 0 Alice 25 New York
  3. 1 Bob 30 San Francisco
  4. 2 Charlie 35 Los Angeles

🟢 DataFrame 属性:
属性说明例index返回DataFrame的行索引print(df.index)columns返回DataFrame的列标签print(df.columns)shape返回DataFrame的维度(行数,列数)print(df.shape)values返回DataFrame的所有数据(不包含索引和列标签)print(df.values)dtype返回每列的数据类型print(df.dtypes)
🟢DataFrame 方法:

  1. pandas.DataFrame

提供了丰富的方法来进行数据操作和分析。
(1)基本方法
方法功能描述示例代码

  1. head(n)

返回前

  1. n

行,默认返回前5行

  1. df.head(3)
  1. tail(n)

返回后

  1. n

行,默认返回后5行

  1. df.tail(3)
  1. shape

返回DataFrame的维度(行数,列数)

  1. df.shape
  1. describe()

生成描述性统计信息

  1. df.describe()
  1. info()

打印DataFrame的信息摘要

  1. df.info()
  1. columns

返回DataFrame的列标签

  1. df.columns
  1. index

返回DataFrame的行索引

  1. df.index
  1. dtypes

返回每列的数据类型

  1. df.dtypes
  1. values

返回DataFrame的数据(不含索引和列标签)

  1. df.values

(2) 数据选择与操作
方法功能描述示例代码

  1. loc[]

按标签选择行和列

  1. df.loc['row_label', 'col_label']
  1. iloc[]

按位置选择行和列

  1. df.iloc[0, 1]
  1. at[]

快速访问单个元素(标签方式)

  1. df.at['row_label', 'col_label']
  1. iat[]

快速访问单个元素(位置方式)

  1. df.iat[0, 1]
  1. drop(labels, axis)

删除指定行或列

  1. df.drop('column_name', axis=1)
  1. rename()

重命名行或列标签

  1. df.rename(columns={'old_name': 'new_name'})
  1. set_index()

设置指定列为索引

  1. df.set_index('column_name')
  1. reset_index()

重置索引为默认整数索引

  1. df.reset_index()
  1. sort_values(by)

按指定列排序

  1. df.sort_values(by='column_name')
  1. sort_index()

按索引排序

  1. df.sort_index()
  1. fillna(value)

用指定值填充缺失值

  1. df.fillna(0)
  1. dropna()

删除包含缺失值的行或列

  1. df.dropna()
  1. duplicated()

检测重复的行

  1. df.duplicated()

(3)数据聚合与变换
方法功能描述示例代码

  1. groupby(by)

按指定列分组

  1. df.groupby('column_name').mean()
  1. agg(func)

对分组后的数据应用多个聚合函数

  1. df.groupby('column_name').agg(['sum', 'mean'])
  1. apply(func)

对DataFrame的每列或每行应用函数

  1. df.apply(lambda x: x.max())
  1. pivot_table()

创建数据透视表

  1. df.pivot_table(index='row_col', values='data_col', aggfunc='mean')
  1. melt()

将DataFrame从宽格式转换为长格式

  1. df.melt(id_vars=['id'], value_vars=['var1', 'var2'])

(4)数据合并与连接
方法功能描述示例代码

  1. merge()

合并两个DataFrame

  1. pd.merge(df1, df2, on='key')
  1. concat()

连接多个DataFrame

  1. pd.concat([df1, df2])
  1. join()

按索引连接两个DataFrame

  1. df1.join(df2)

三、标签和索引

在Pandas中,"索引"和"标签"在某些方面相似,但它们的使用和作用有些不同。

索引(Index):

  • 定义:在Pandas中,"索引"指的是用于标识数据的位置的标签。它可以是行索引(对于DataFrameSeries的行)或列索引(对于DataFrame的列)。
  • 功能:- 定位和访问数据:索引用于定位和访问数据。例如,通过行索引,可以快速访问特定行的数据。- 对齐数据:在进行数据合并、对齐等操作时,Pandas会自动对齐索引,以确保数据一致性。- 标签的灵活性:索引不仅可以是整数,还可以是字符串、日期、时间等类型,提供了灵活的数据标识方式。
  • 示例:import pandas as pd# 创建一个Seriess = pd.Series([10,20,30], index=['a','b','c'])print(s.index)# 输出: Index(['a', 'b', 'c'], dtype='object')# 创建一个DataFramedf = pd.DataFrame({'name':['Alice','Bob','Charlie'],'age':[25,30,35]}, index=['one','two','three'])print(df.index)# 输出: Index(['one', 'two', 'three'], dtype='object')

标签(Label):

  • 定义:在Pandas中,"标签"通常是指数据的具体标识符或名称,用于访问SeriesDataFrame中的特定数据。
  • 功能:- 数据访问:通过标签可以直接访问SeriesDataFrame中的数据。例如,通过标签获取特定的行或列。- 行列操作:标签用于进行行和列的操作,比如选择特定的行或列,或对行列进行重命名等。
  • 示例:import pandas as pd# 创建一个Seriess = pd.Series([10,20,30], index=['a','b','c'])print(s['a'])# 输出: 10# 创建一个DataFramedf = pd.DataFrame({'name':['Alice','Bob','Charlie'],'age':[25,30,35]}, index=['one','two','three'])print(df.loc['one'])# 输出: name Alice\nage 25\nName: one, dtype: object

区别与联系:

  1. 相似性:- 索引和标签都是用来标识数据的,索引是Pandas的核心结构之一,标签是索引的一种具体应用。- 标签是索引的一部分:在Series中,标签通常指的是索引的具体值,用于访问数据。
  2. 区别:- 范围:索引是一种广泛的概念,涉及行索引和列索引,而标签更具体,通常指单个索引值。- 用途:索引用于整体的标识和数据对齐,而标签更多用于数据的实际访问和操作。

四、常用方法

有很多方法在前面Series和DataFrame的方法表格里面,包括数据的打印预览、索引设置、统计性信息等等,都很常用,这里不重复介绍了。

4.1 数据读取和写入

Pandas支持多种数据格式的读取和写入,包括CSV、Excel、Txt、SQL数据库、JSON、HDF5等。

4.11 🟢CSV文件

**也适用于

  1. .txt

文件。**

读取:
默认将第一行作为列名即列标签,如果本来有列名,又指定了列名,则会把原来的列名当成第一行数据。

  1. import pandas as pd
  2. # 从CSV文件读取数据
  3. df = pd.read_csv('file_path.csv')# 指定分隔符
  4. df = pd.read_csv('file_path.csv', delimiter=',')# 指定列名
  5. df = pd.read_csv('file_path.csv', names=['col1','col2','col3'])# 指定编码(如果出错):utf-8,ISO-8859-1,latin1,cp1252
  6. df = pd.read_csv('file_path.csv', encoding='utf-8')# 读取特定列,可以是列索引,也可以是列标签
  7. df = pd.read_csv('file_path.csv', usecols=['col1','col2'])# 将特定列作为索引,可以是列索引,也可以是列标签
  8. df = pd.read_csv('file_path.csv', index_col='A1')# 将某一列转换为整数
  9. df = pd.read_csv('file_path.csv', converters={'column_name': to_int})

参数,只有文件名是必选。
参数名类型默认值描述

  1. filepath_or_buffer

str, path-like, file-likeNone读取的CSV文件路径或文件对象。

  1. sep

str‘,’分隔符,用于分隔文件中的字段。

  1. delimiter

strNone与

  1. sep

相同,指定字段的分隔符。

  1. header

int, list of int, None‘infer’用于指定行号作为列名。如果为None,则默认读取第一行作为列名。

  1. names

array-likeNone指定列名。如果提供了

  1. header

参数为None,则使用这些列名。

  1. index_col

int, str, sequence of int/strNone用作索引的列编号或列名。

  1. usecols

list-like, callableNone读取的列。可以是列的编号、名称或一个函数。

  1. dtype

Type name or dict of column -> typeNone数据类型,用于转换数据。

  1. engine

{‘c’, ‘python’}‘c’CSV解析器引擎。

  1. c

是C语言引擎,

  1. python

是Python引擎。

  1. skiprows

int, list-likeNone跳过的行数或行号列表。

  1. skipfooter

int0文件末尾跳过的行数。

  1. nrows

intNone读取的行数。

  1. na_values

scalar, str, list-like, dictNone指定缺失值的标记。

  1. keep_default_na

boolTrue是否保留缺失值标记。

  1. converters

dictNone列转换函数字典。

  1. parse_dates

bool, list, dictFalse解析日期列。

  1. date_parser

functionNone自定义日期解析函数。

  1. thousands

strNone数字中的千分位分隔符。

  1. comment

strNone用于指定注释的开始字符。

  1. encoding

strNone文件的编码格式。

  1. encoding_errors

str‘strict’编码错误处理策略。

  1. quotechar

str‘"’字符串引用字符。

  1. quoting

int0控制字段的引用方式。

  1. doublequote

boolTrue是否使用双引号来表示包含双引号的字段。

  1. escapechar

strNone转义字符。

  1. line_terminator

strNone行终止符。

  1. skipinitialspace

boolFalse是否跳过字段值中的初始空格。

  1. skip_blank_lines

boolTrue是否跳过空白行。

  1. mangle_dupe_cols

boolTrue是否处理重复列名。

  1. storage_options

dictNone存储选项,用于文件系统或其他外部存储。
写入:

  1. # 写入到CSV文件
  2. df.to_csv('file_path.csv', index=False)# 包含索引
  3. df.to_csv('file_path_with_index.csv', index=True)# 不写入列名
  4. df.to_csv('file_path_without_header.csv', header=False)

参数名类型默认值描述

  1. path_or_buf

str, path-like, file-likeNone要保存的目标路径或文件对象。如果为

  1. None

,则返回字符串。

  1. sep

str‘,’字段分隔符,用于分隔文件中的字段。

  1. na_rep

str‘’替换缺失值的字符串。

  1. float_format

strNone浮点数的格式字符串。

  1. columns

sequence, optionalNone指定要写入文件的列。如果为

  1. None

,则写入所有列。

  1. header

bool, list of strTrue是否写入列名。如果为布尔值,表示是否写入列名。如果为列表,指定列名。

  1. index

boolTrue是否写入行索引。

  1. index_label

str, sequence, or NoneNone行索引的标签。

  1. mode

str‘w’文件打开模式。

  1. encoding

strNone文件的编码格式。

  1. compression

{‘infer’, ‘bz2’, ‘gzip’, ‘xz’, ‘zip’, None}None文件压缩格式。

  1. quotechar

str‘"’字符串引用字符。

  1. quoting

int0控制字段的引用方式。

  1. line_terminator

strNone行终止符。

  1. chunksize

intNone分块大小。如果指定,数据将被分块写入。

  1. date_format

strNone日期格式。

  1. doublequote

boolTrue是否使用双引号来表示包含双引号的字段。

  1. escapechar

strNone转义字符。

  1. errors

str‘strict’错误处理策略。

  1. storage_options

dictNone存储选项,用于文件系统或其他外部存储。

4.12🟢Excel文件

读取:

  1. # 从Excel文件读取数据
  2. df = pd.read_excel('file_path.xlsx', sheet_name='Sheet1')# 读取多个表单
  3. df = pd.read_excel('file_path.xlsx', sheet_name=['Sheet1','Sheet2'])# 读取特定列
  4. df = pd.read_excel('file_path.xlsx', usecols=['col1','col2'])# 读取特定行
  5. df = pd.read_excel('file_path.xlsx', skiprows=5)

参数名类型默认值描述

  1. io

str, path-like, file-likeNone要读取的Excel文件路径或文件对象。

  1. sheet_name

str, int, list, None0要读取的工作表名或索引,

  1. None

读取所有工作表。

  1. header

int, list of int, None0用作列名的行号。如果为None,则默认使用第一行作为列名。

  1. names

array-likeNone指定列名。如果提供了

  1. header

参数为None,则使用这些列名。

  1. index_col

int, str, sequence of int/strNone用作索引的列编号或列名。

  1. usecols

list-like, callableNone读取的列。可以是列的编号、名称或一个函数。

  1. dtype

Type name or dict of column -> typeNone数据类型,用于转换数据。

  1. engine

{‘xlrd’, ‘openpyxl’, ‘odf’, ‘pyxlsb’}NoneExcel解析器引擎。选择用于读取Excel文件的引擎。

  1. converters

dictNone列转换函数字典。

  1. parse_dates

bool, list, dictFalse解析日期列。

  1. date_parser

functionNone自定义日期解析函数。

  1. thousands

strNone数字中的千分位分隔符。

  1. skiprows

int, list-likeNone跳过的行数或行号列表。

  1. skipfooter

int0文件末尾跳过的行数。

  1. nrows

intNone读取的行数。

  1. na_values

scalar, str, list-like, dictNone指定缺失值的标记。

  1. keep_default_na

boolTrue是否保留缺失值标记。

  1. convert_float

boolTrue是否将浮点数转换为float类型。

  1. json_normalize

boolFalse是否将嵌套JSON数据展平。

  1. storage_options

dictNone存储选项,用于文件系统或其他外部存储。
写入:

  1. # 写入到Excel文件
  2. df.to_excel('file_path.xlsx', sheet_name='Sheet1', index=False)# 写入多个表单with pd.ExcelWriter('file_path.xlsx')as writer:
  3. df1.to_excel(writer, sheet_name='Sheet1', index=False)
  4. df2.to_excel(writer, sheet_name='Sheet2', index=False)

参数名类型默认值描述

  1. excel_writer

str, ExcelWriterNoneExcel文件路径或

  1. ExcelWriter

对象,用于保存文件。

  1. sheet_name

str‘Sheet1’要写入的工作表名称。

  1. na_rep

str‘’替换缺失值的字符串。

  1. float_format

strNone浮点数的格式字符串。

  1. columns

sequence, optionalNone指定要写入文件的列。如果为

  1. None

,则写入所有列。

  1. header

bool, list of strTrue是否写入列名。如果为布尔值,表示是否写入列名。如果为列表,指定列名。

  1. index

boolTrue是否写入行索引。

  1. index_label

str, sequence, or NoneNone行索引的标签。

  1. startrow

int0写入数据的起始行。

  1. startcol

int0写入数据的起始列。

  1. engine

{‘xlsxwriter’, ‘openpyxl’, ‘odf’, ‘xlwt’}NoneExcel写入引擎。选择用于写入Excel文件的引擎。

  1. merge_cells

boolTrue是否合并单元格。

  1. encoding

strNone文件的编码格式。

  1. date_format

strNone日期格式。

  1. datetime_format

strNone

  1. datetime

对象的格式。

  1. sheet_name

str‘Sheet1’要写入的工作表名称。

  1. engine

{‘xlsxwriter’, ‘openpyxl’, ‘odf’, ‘xlwt’}NoneExcel写入引擎。选择用于写入Excel文件的引擎。

  1. options

dictNone存储选项,用于文件系统或其他外部存储。

4.13 其它文件

(1)SQL数据库

  1. from sqlalchemy import create_engine
  2. # 创建数据库连接
  3. engine = create_engine('sqlite:///database.db')# SQL数据库读取数据
  4. df = pd.read_sql('SELECT * FROM table_name', con=engine)# 读取指定列
  5. df = pd.read_sql('SELECT col1, col2 FROM table_name', con=engine)# DataFrame写入SQL数据库
  6. df.to_sql('table_name', con=engine, if_exists='replace', index=False)# if_exists参数:# 'fail' - 如果表存在,则抛出ValueError# 'replace' - 如果表存在,删除表后写入# 'append' - 如果表存在,数据追加到表中

(2)JSON

  1. # 从JSON文件读取数据
  2. df = pd.read_json('file_path.json')# 读取JSON文件的特定部分
  3. df = pd.read_json('file_path.json', orient='records')# 写入到JSON文件
  4. df.to_json('file_path.json', orient='records', lines=True)# orient参数:# 'split' - 分割格式# 'records' - 记录格式# 'index' - 索引格式# 'columns' - 列格式# 'values' - 值格式

还有好多其它格式,不展开了。

4.2 字符串处理

  1. pandas

中,字符串处理可以通过

  1. Series

对象的

  1. .str

属性来进行。这个属性提供了一系列用于处理字符串的方便方法。
方法名描述示例代码

  1. str.lower()

将字符串转换为小写字母。

  1. df['col'].str.lower()
  1. str.upper()

将字符串转换为大写字母。

  1. df['col'].str.upper()
  1. str.title()

将字符串的每个单词首字母大写。

  1. df['col'].str.title()
  1. str.capitalize()

将字符串的首字母大写,其余字母小写。

  1. df['col'].str.capitalize()
  1. str.strip()

去除字符串两端的空白字符。

  1. df['col'].str.strip()
  1. str.lstrip()

去除字符串左侧的空白字符。

  1. df['col'].str.lstrip()
  1. str.rstrip()

去除字符串右侧的空白字符。

  1. df['col'].str.rstrip()
  1. str.replace()

替换字符串中的指定子字符串。

  1. df['col'].str.replace('old', 'new')
  1. str.find()

查找子字符串的位置,如果不存在则返回 -1。

  1. df['col'].str.find('substring')
  1. str.contains()

检查字符串中是否包含指定的子字符串。

  1. df['col'].str.contains('substring')
  1. str.startswith()

检查字符串是否以指定子字符串开头。

  1. df['col'].str.startswith('prefix')
  1. str.endswith()

检查字符串是否以指定子字符串结尾。

  1. df['col'].str.endswith('suffix')
  1. str.split()

根据指定的分隔符拆分字符串,返回一个列表。

  1. df['col'].str.split(',')
  1. str.join()

将列表中的字符串用指定分隔符连接成一个字符串。

  1. df['col'].str.join(',')
  1. str.extract()

使用正则表达式提取匹配的子字符串。

  1. df['col'].str.extract(r'(\d+)')
  1. str.findall()

使用正则表达式查找所有匹配的子字符串。

  1. df['col'].str.findall(r'\d+')
  1. str.zfill()

在字符串的左侧填充零,使其达到指定的宽度。

  1. df['col'].str.zfill(5)
  1. str.isalpha()

检查字符串是否仅包含字母。

  1. df['col'].str.isalpha()
  1. str.isdigit()

检查字符串是否仅包含数字。

  1. df['col'].str.isdigit()
  1. str.isnumeric()

检查字符串是否仅包含数字字符。

  1. df['col'].str.isnumeric()
  1. str.islower()

检查字符串是否仅包含小写字母。

  1. df['col'].str.islower()
  1. str.isupper()

检查字符串是否仅包含大写字母。

  1. df['col'].str.isupper()

4.3 表格拼接

  1. pandas

中,表格拼接主要通过以下方法实现:

  1. **concat**:用于沿指定轴(行或列)将多个 DataFrame 连接在一起。
  2. **append**:用于将一个 DataFrame 添加到另一个 DataFrame 的末尾,实际上是 concat 的一种快捷方式。
  3. **merge**:用于通过一个或多个键将两个 DataFrame 进行连接,类似于 SQL 中的 JOIN 操作。
  4. **join**:用于将两个 DataFrame 进行基于索引的连接,类似于 merge,但通常用于基于索引的连接。

是Series、DataFrame之间拼接,不能直接把列表这些和它们拼接。

  1. add =['Alice','hello','Ha','Nice']
  2. df['A4']= pd.Series(add)

🟢concat:

  1. concat

方法用于沿指定轴将多个 DataFrame 合并在一起,可以处理不同的轴和连接方式(如外连接、内连接)。

主要参数:
参数名类型默认值描述

  1. objs

list of DataFrameNone要拼接的 DataFrame 对象列表。

  1. axis

int0指定拼接的轴,

  1. 0

为行方向(增加行数),

  1. 1

为列方向(增加列数)。

  1. join

{‘inner’, ‘outer’}‘outer’指定连接方式,

  1. 'inner'

表示内连接,

  1. 'outer'

表示外连接。

  1. ignore_index

boolFalse是否忽略原有的行索引,重新生成新的行索引。

  1. keys

listNone生成层次化索引的键。
示例:

  1. import pandas as pd
  2. # 创建示例 DataFrame
  3. df1 = pd.DataFrame({'A':['A0','A1'],'B':['B0','B1']})
  4. df2 = pd.DataFrame({'A':['A2','A3'],'B':['B2','B3']})# 沿行方向拼接
  5. result = pd.concat([df1, df2], axis=0, ignore_index=True)print(result)

输出:

  1. A B
  2. 0 A0 B0
  3. 1 A1 B1
  4. 2 A2 B2
  5. 3 A3 B3

🟢append:

  1. append

方法用于将一个 DataFrame 追加到另一个 DataFrame 的末尾。它是

  1. concat

的简化版本,主要用于行拼接(增加行数)。

示例:

  1. import pandas as pd
  2. # 创建示例 DataFrame
  3. df1 = pd.DataFrame({'A':['A0','A1'],'B':['B0','B1']})
  4. df2 = pd.DataFrame({'A':['A2','A3'],'B':['B2','B3']})# 追加 df2 df1
  5. result = df1.append(df2, ignore_index=True)print(result)

输出:

  1. A B
  2. 0 A0 B0
  3. 1 A1 B1
  4. 2 A2 B2
  5. 3 A3 B3

🟢merge:

  1. merge

用于通过一个或多个键将两个 DataFrame 进行连接,支持多种合并方式,包括内连接、外连接、左连接和右连接。

主要参数:
参数名类型默认值描述

  1. left

DataFrameNone左侧 DataFrame。

  1. right

DataFrameNone右侧 DataFrame。

  1. how

{‘left’, ‘right’, ‘outer’, ‘inner’}‘inner’合并方式:

  1. 'left'

  1. 'right'

  1. 'outer'

  1. 'inner'

  1. on

str, list of strNone用于合并的列名。如果列名不同,可以使用

  1. left_on

  1. right_on

参数。

  1. left_on

str, list of strNone左侧 DataFrame 中用于合并的列名。

  1. right_on

str, list of strNone右侧 DataFrame 中用于合并的列名。

  1. left_index

boolFalse是否使用左侧 DataFrame 的索引进行合并。

  1. right_index

boolFalse是否使用右侧 DataFrame 的索引进行合并。
示例代码:

  1. import pandas as pd
  2. # 创建示例 DataFrame
  3. df1 = pd.DataFrame({'key':['A','B','C'],'value1':[1,2,3]})
  4. df2 = pd.DataFrame({'key':['B','C','D'],'value2':[4,5,6]})# 内连接
  5. result = pd.merge(df1, df2, on='key', how='inner')print(result)

输出:

  1. key value1 value2
  2. 0 B 241 C 35

🟢join:

  1. join

方法用于基于索引连接两个 DataFrame,通常用于索引对齐。

示例代码:

  1. import pandas as pd
  2. # 创建示例 DataFrame
  3. df1 = pd.DataFrame({'A':[1,2,3]}, index=['a','b','c'])
  4. df2 = pd.DataFrame({'B':[4,5]}, index=['b','c'])# 使用 join 基于索引连接
  5. result = df1.join(df2)print(result)

输出:

  1. A B
  2. a 1 NaN
  3. b 2 4.0
  4. c 3 5.0

4.4 时间数据处理

(1)解析和创建日期时间数据
方法/属性主要参数描述

  1. pd.to_datetime
  1. arg

,

  1. format

,

  1. errors

将日期时间字符串转换为

  1. datetime

对象。

  1. pd.date_range
  1. start

,

  1. end

,

  1. freq

,

  1. periods

创建指定频率的日期时间索引。
(2)日期时间属性访问
方法/属性主要参数描述

  1. .dt.year

-获取年份

  1. .dt.month

-获取月份

  1. .dt.day

-获取日期

  1. .dt.hour

-获取小时

  1. .dt.minute

-获取分钟

  1. .dt.second

-获取秒数

  1. .dt.weekday()

-获取星期几,0 表示星期一

  1. .dt.strftime()
  1. format

按指定格式格式化日期时间对象为字符串。
(3)时间差和时间计算
方法/属性主要参数描述

  1. Timedelta
  1. days

,

  1. hours

,

  1. minutes

创建时间差对象。

  1. pd.DateOffset
  1. days

,

  1. months

,

  1. years

创建日期偏移对象,添加或减去时间。
(4)日期时间索引和重采样
方法/属性主要参数描述

  1. pd.date_range
  1. start

,

  1. end

,

  1. freq

,

  1. periods

创建日期时间索引。

  1. .resample()
  1. rule

,

  1. how

对时间序列数据进行重采样。

  1. .asfreq()
  1. freq

,

  1. fill_value

设置时间序列的频率,选择填充值。
(5)日期时间格式化
方法/属性主要参数描述

  1. .strftime()
  1. format

按指定格式将日期时间对象格式化为字符串。
(6) 时间窗口操作
方法/属性主要参数描述

  1. .rolling()
  1. window

,

  1. min_periods

创建滚动窗口。

  1. .sum()

-计算滚动窗口的总和。

  1. .mean()

-计算滚动窗口的均值。

  1. .apply()
  1. func

对滚动窗口应用自定义函数。

  1. format

: 指定格式的字符串。可以包含以下格式符号:
符号描述示例

  1. %Y

年(四位数字)

  1. 2024
  1. %m

月(两位数字)

  1. 07
  1. %d

日(两位数字)

  1. 22
  1. %H

小时(24小时制)

  1. 10
  1. %M

分钟

  1. 30
  1. %S

秒数

  1. 45
  1. %f

微秒

  1. 123456
  1. %a

星期几(缩写)

  1. Mon
  1. %A

星期几(全名)

  1. Monday
  1. %b

月份(缩写)

  1. Jul
  1. %B

月份(全名)

  1. July
  1. import pandas as pd
  2. ts = pd.Timestamp('2024-07-22 10:30:45')print(ts.strftime('%Y-%m-%d'))# 2024-07-22print(ts.strftime('%d/%m/%Y'))# 22/07/2024print(ts.strftime('%I:%M %p'))# 10:30 AM

本文转载自: https://blog.csdn.net/weixin_43764974/article/details/140607989
版权归原作者 感谢地心引力 所有, 如有侵权,请联系我们删除。

“【Python】Pandas简要教程”的评论:

还没有评论