0


【Python】Pandas简要教程

文章目录

一、简介

Pandas

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

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

等方面有广泛的应用。

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

pd.Series

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

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

import pandas as pd
# 通过列表创建
s = pd.Series([1,3,5,7,9])# 通过字典创建
data ={'a':1,'b':3,'c':5}
s = pd.Series(data)# 通过标量创建(指定索引)
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)基本方法
方法功能描述示例代码

head(n)

返回前

n

个元素,默认返回前5个

s.head(3)
tail(n)

返回后

n

个元素,默认返回后5个

s.tail(3)
shape

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

s.shape
index

返回Series的索引标签

s.index
values

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

s.values
dtypes

返回Series的数据类型

s.dtypes

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

loc[]

按标签选择元素

s.loc['a']
iloc[]

按位置选择元素

s.iloc[0]
at[]

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

s.at['a']
iat[]

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

s.iat[0]
drop(labels)

删除指定的元素

s.drop('a')
rename()

重命名索引标签

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

替换指定的值

s.replace(10, 100)
map()

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

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

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

s.apply(lambda x: x + 1)

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

sum()

计算Series中所有元素的和

s.sum()
mean()

计算Series中所有元素的均值

s.mean()
median()

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

s.median()
mode()

计算Series中所有元素的众数

s.mode()
std()

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

s.std()
var()

计算Series中所有元素的方差

s.var()
count()

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

s.count()
min()

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

s.min()
max()

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

s.max()

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

isna()

检测缺失值(NA/null)

s.isna()
notna()

检测非缺失值

s.notna()
fillna(value)

用指定值填充缺失值

s.fillna(0)
dropna()

删除包含缺失值的元素

s.dropna()

2.2 DataFrame

pandas.DataFrame

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

Series

构成的字典,每个

Series

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

DataFrame

的详细介绍:

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

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'])

输出:

      name  age           city
0    Alice   25       New York
1      Bob   30  San Francisco
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 方法:

pandas.DataFrame

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

head(n)

返回前

n

行,默认返回前5行

df.head(3)
tail(n)

返回后

n

行,默认返回后5行

df.tail(3)
shape

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

df.shape
describe()

生成描述性统计信息

df.describe()
info()

打印DataFrame的信息摘要

df.info()
columns

返回DataFrame的列标签

df.columns
index

返回DataFrame的行索引

df.index
dtypes

返回每列的数据类型

df.dtypes
values

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

df.values

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

loc[]

按标签选择行和列

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

按位置选择行和列

df.iloc[0, 1]
at[]

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

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

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

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

删除指定行或列

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

重命名行或列标签

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

设置指定列为索引

df.set_index('column_name')
reset_index()

重置索引为默认整数索引

df.reset_index()
sort_values(by)

按指定列排序

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

按索引排序

df.sort_index()
fillna(value)

用指定值填充缺失值

df.fillna(0)
dropna()

删除包含缺失值的行或列

df.dropna()
duplicated()

检测重复的行

df.duplicated()

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

groupby(by)

按指定列分组

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

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

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

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

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

创建数据透视表

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

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

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

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

merge()

合并两个DataFrame

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

连接多个DataFrame

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

按索引连接两个DataFrame

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文件

**也适用于

.txt

文件。**

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

import pandas as pd

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

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

filepath_or_buffer

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

sep

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

delimiter

strNone与

sep

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

header

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

names

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

header

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

index_col

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

usecols

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

dtype

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

engine

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

c

是C语言引擎,

python

是Python引擎。

skiprows

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

skipfooter

int0文件末尾跳过的行数。

nrows

intNone读取的行数。

na_values

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

keep_default_na

boolTrue是否保留缺失值标记。

converters

dictNone列转换函数字典。

parse_dates

bool, list, dictFalse解析日期列。

date_parser

functionNone自定义日期解析函数。

thousands

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

comment

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

encoding

strNone文件的编码格式。

encoding_errors

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

quotechar

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

quoting

int0控制字段的引用方式。

doublequote

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

escapechar

strNone转义字符。

line_terminator

strNone行终止符。

skipinitialspace

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

skip_blank_lines

boolTrue是否跳过空白行。

mangle_dupe_cols

boolTrue是否处理重复列名。

storage_options

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

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

参数名类型默认值描述

path_or_buf

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

None

,则返回字符串。

sep

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

na_rep

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

float_format

strNone浮点数的格式字符串。

columns

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

None

,则写入所有列。

header

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

index

boolTrue是否写入行索引。

index_label

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

mode

str‘w’文件打开模式。

encoding

strNone文件的编码格式。

compression

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

quotechar

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

quoting

int0控制字段的引用方式。

line_terminator

strNone行终止符。

chunksize

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

date_format

strNone日期格式。

doublequote

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

escapechar

strNone转义字符。

errors

str‘strict’错误处理策略。

storage_options

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

4.12🟢Excel文件

读取:

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

参数名类型默认值描述

io

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

sheet_name

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

None

读取所有工作表。

header

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

names

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

header

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

index_col

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

usecols

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

dtype

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

engine

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

converters

dictNone列转换函数字典。

parse_dates

bool, list, dictFalse解析日期列。

date_parser

functionNone自定义日期解析函数。

thousands

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

skiprows

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

skipfooter

int0文件末尾跳过的行数。

nrows

intNone读取的行数。

na_values

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

keep_default_na

boolTrue是否保留缺失值标记。

convert_float

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

json_normalize

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

storage_options

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

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

参数名类型默认值描述

excel_writer

str, ExcelWriterNoneExcel文件路径或

ExcelWriter

对象,用于保存文件。

sheet_name

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

na_rep

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

float_format

strNone浮点数的格式字符串。

columns

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

None

,则写入所有列。

header

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

index

boolTrue是否写入行索引。

index_label

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

startrow

int0写入数据的起始行。

startcol

int0写入数据的起始列。

engine

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

merge_cells

boolTrue是否合并单元格。

encoding

strNone文件的编码格式。

date_format

strNone日期格式。

datetime_format

strNone

datetime

对象的格式。

sheet_name

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

engine

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

options

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

4.13 其它文件

(1)SQL数据库

from sqlalchemy import create_engine

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

(2)JSON

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

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

4.2 字符串处理

pandas

中,字符串处理可以通过

Series

对象的

.str

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

str.lower()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.3 表格拼接

pandas

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

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

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

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

🟢concat:

concat

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

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

objs

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

axis

int0指定拼接的轴,

0

为行方向(增加行数),

1

为列方向(增加列数)。

join

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

'inner'

表示内连接,

'outer'

表示外连接。

ignore_index

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

keys

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

import pandas as pd

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

输出:

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

🟢append:

append

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

concat

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

示例:

import pandas as pd

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

输出:

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

🟢merge:

merge

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

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

left

DataFrameNone左侧 DataFrame。

right

DataFrameNone右侧 DataFrame。

how

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

'left'

'right'

'outer'

'inner'

on

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

left_on

right_on

参数。

left_on

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

right_on

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

left_index

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

right_index

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

import pandas as pd

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

输出:

  key  value1  value2
0   B       241   C       35

🟢join:

join

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

示例代码:

import pandas as pd

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

输出:

   A    B
a  1  NaN
b  2  4.0
c  3  5.0

4.4 时间数据处理

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

pd.to_datetime
arg

,

format

,

errors

将日期时间字符串转换为

datetime

对象。

pd.date_range
start

,

end

,

freq

,

periods

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

.dt.year

-获取年份

.dt.month

-获取月份

.dt.day

-获取日期

.dt.hour

-获取小时

.dt.minute

-获取分钟

.dt.second

-获取秒数

.dt.weekday()

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

.dt.strftime()
format

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

Timedelta
days

,

hours

,

minutes

创建时间差对象。

pd.DateOffset
days

,

months

,

years

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

pd.date_range
start

,

end

,

freq

,

periods

创建日期时间索引。

.resample()
rule

,

how

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

.asfreq()
freq

,

fill_value

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

.strftime()
format

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

.rolling()
window

,

min_periods

创建滚动窗口。

.sum()

-计算滚动窗口的总和。

.mean()

-计算滚动窗口的均值。

.apply()
func

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

format

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

%Y

年(四位数字)

2024
%m

月(两位数字)

07
%d

日(两位数字)

22
%H

小时(24小时制)

10
%M

分钟

30
%S

秒数

45
%f

微秒

123456
%a

星期几(缩写)

Mon
%A

星期几(全名)

Monday
%b

月份(缩写)

Jul
%B

月份(全名)

July
import pandas as pd

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简要教程”的评论:

还没有评论