文章目录
一、简介
Pandas
是一个用于数据操作和分析的开源 Python 库。它提供了高效的数据结构和数据分析工具,特别适合处理结构化数据(如表格数据)。Pandas 在
数据清洗、预处理、统计分析、数据可视化
等方面有广泛的应用。
Github:https://github.com/pandas-dev/pandas
User Guide:https://pandas.pydata.org/docs/user_guide/index.html
主要特点:
- 易用的数据结构:- Series:一维数组,类似于 Python 的列表或字典。- DataFrame:二维数据结构,类似于 Excel 表格或 SQL 表。
- 数据操作:- 支持对数据进行增删改查操作。- 提供丰富的数据清洗和预处理功能,包括缺失值处理、数据过滤、分组、聚合等。- 支持多种数据格式的读写,如 CSV、Excel、SQL、JSON 等。
- 高效的性能:- 基于 NumPy 实现,具有高效的计算性能。- 支持多种加速库,如 Dask、Modin,可以在大数据处理时提升性能。
- 数据可视化:- 与 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
:**
- 通过字典创建
data ={'name':['Alice','Bob','Charlie'],'age':[25,30,35],'city':['New York','San Francisco','Los Angeles']}df = pd.DataFrame(data)
- 通过列表的列表创建
data =[['Alice',25,'New York'],['Bob',30,'San Francisco'],['Charlie',35,'Los Angeles']]columns =['name','age','city']df = pd.DataFrame(data, columns=columns)
- 通过字典的字典创建
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)
- 通过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中,"索引"指的是用于标识数据的位置的标签。它可以是行索引(对于
DataFrame
和Series
的行)或列索引(对于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中,"标签"通常是指数据的具体标识符或名称,用于访问
Series
或DataFrame
中的特定数据。 - 功能:- 数据访问:通过标签可以直接访问
Series
或DataFrame
中的数据。例如,通过标签获取特定的行或列。- 行列操作:标签用于进行行和列的操作,比如选择特定的行或列,或对行列进行重命名等。 - 示例:
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
区别与联系:
- 相似性:- 索引和标签都是用来标识数据的,索引是Pandas的核心结构之一,标签是索引的一种具体应用。- 标签是索引的一部分:在
Series
中,标签通常指的是索引的具体值,用于访问数据。 - 区别:- 范围:索引是一种广泛的概念,涉及行索引和列索引,而标签更具体,通常指单个索引值。- 用途:索引用于整体的标识和数据对齐,而标签更多用于数据的实际访问和操作。
四、常用方法
有很多方法在前面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
中,表格拼接主要通过以下方法实现:
- **
concat
**:用于沿指定轴(行或列)将多个 DataFrame 连接在一起。- **
append
**:用于将一个 DataFrame 添加到另一个 DataFrame 的末尾,实际上是concat
的一种快捷方式。- **
merge
**:用于通过一个或多个键将两个 DataFrame 进行连接,类似于 SQL 中的 JOIN 操作。- **
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
版权归原作者 感谢地心引力 所有, 如有侵权,请联系我们删除。