首页 > Python资料 博客日记

【Python】Pandas简要教程

2024-10-11 13:00:05Python资料围观38

这篇文章介绍了【Python】Pandas简要教程,分享给大家做个参考,收藏Python资料网收获更多编程知识

一、简介

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.values
name返回或设置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()合并两个DataFramepd.merge(df1, df2, on='key')
concat()连接多个DataFramepd.concat([df1, df2])
join()按索引连接两个DataFramedf1.join(df2)

三、标签和索引

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

索引(Index):

  • 定义:在Pandas中,"索引"指的是用于标识数据的位置的标签。它可以是行索引(对于DataFrameSeries的行)或列索引(对于DataFrame的列)。

  • 功能:

    • 定位和访问数据:索引用于定位和访问数据。例如,通过行索引,可以快速访问特定行的数据。
    • 对齐数据:在进行数据合并、对齐等操作时,Pandas会自动对齐索引,以确保数据一致性。
    • 标签的灵活性:索引不仅可以是整数,还可以是字符串、日期、时间等类型,提供了灵活的数据标识方式。
  • 示例:

    import pandas as pd
    
    # 创建一个Series
    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    print(s.index)  # 输出: Index(['a', 'b', 'c'], dtype='object')
    
    # 创建一个DataFrame
    df = 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
    
    # 创建一个Series
    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    print(s['a'])  # 输出: 10
    
    # 创建一个DataFrame
    df = 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_bufferstr, path-like, file-likeNone读取的CSV文件路径或文件对象。
sepstr‘,’分隔符,用于分隔文件中的字段。
delimiterstrNonesep 相同,指定字段的分隔符。
headerint, list of int, None‘infer’用于指定行号作为列名。如果为None,则默认读取第一行作为列名。
namesarray-likeNone指定列名。如果提供了 header 参数为None,则使用这些列名。
index_colint, str, sequence of int/strNone用作索引的列编号或列名。
usecolslist-like, callableNone读取的列。可以是列的编号、名称或一个函数。
dtypeType name or dict of column -> typeNone数据类型,用于转换数据。
engine{‘c’, ‘python’}‘c’CSV解析器引擎。c 是C语言引擎,python 是Python引擎。
skiprowsint, list-likeNone跳过的行数或行号列表。
skipfooterint0文件末尾跳过的行数。
nrowsintNone读取的行数。
na_valuesscalar, str, list-like, dictNone指定缺失值的标记。
keep_default_naboolTrue是否保留缺失值标记。
convertersdictNone列转换函数字典。
parse_datesbool, list, dictFalse解析日期列。
date_parserfunctionNone自定义日期解析函数。
thousandsstrNone数字中的千分位分隔符。
commentstrNone用于指定注释的开始字符。
encodingstrNone文件的编码格式。
encoding_errorsstr‘strict’编码错误处理策略。
quotecharstr‘"’字符串引用字符。
quotingint0控制字段的引用方式。
doublequoteboolTrue是否使用双引号来表示包含双引号的字段。
escapecharstrNone转义字符。
line_terminatorstrNone行终止符。
skipinitialspaceboolFalse是否跳过字段值中的初始空格。
skip_blank_linesboolTrue是否跳过空白行。
mangle_dupe_colsboolTrue是否处理重复列名。
storage_optionsdictNone存储选项,用于文件系统或其他外部存储。

写入:

# 写入到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_bufstr, path-like, file-likeNone要保存的目标路径或文件对象。如果为 None,则返回字符串。
sepstr‘,’字段分隔符,用于分隔文件中的字段。
na_repstr‘’替换缺失值的字符串。
float_formatstrNone浮点数的格式字符串。
columnssequence, optionalNone指定要写入文件的列。如果为 None,则写入所有列。
headerbool, list of strTrue是否写入列名。如果为布尔值,表示是否写入列名。如果为列表,指定列名。
indexboolTrue是否写入行索引。
index_labelstr, sequence, or NoneNone行索引的标签。
modestr‘w’文件打开模式。
encodingstrNone文件的编码格式。
compression{‘infer’, ‘bz2’, ‘gzip’, ‘xz’, ‘zip’, None}None文件压缩格式。
quotecharstr‘"’字符串引用字符。
quotingint0控制字段的引用方式。
line_terminatorstrNone行终止符。
chunksizeintNone分块大小。如果指定,数据将被分块写入。
date_formatstrNone日期格式。
doublequoteboolTrue是否使用双引号来表示包含双引号的字段。
escapecharstrNone转义字符。
errorsstr‘strict’错误处理策略。
storage_optionsdictNone存储选项,用于文件系统或其他外部存储。

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)

参数名类型默认值描述
iostr, path-like, file-likeNone要读取的Excel文件路径或文件对象。
sheet_namestr, int, list, None0要读取的工作表名或索引,None 读取所有工作表。
headerint, list of int, None0用作列名的行号。如果为None,则默认使用第一行作为列名。
namesarray-likeNone指定列名。如果提供了 header 参数为None,则使用这些列名。
index_colint, str, sequence of int/strNone用作索引的列编号或列名。
usecolslist-like, callableNone读取的列。可以是列的编号、名称或一个函数。
dtypeType name or dict of column -> typeNone数据类型,用于转换数据。
engine{‘xlrd’, ‘openpyxl’, ‘odf’, ‘pyxlsb’}NoneExcel解析器引擎。选择用于读取Excel文件的引擎。
convertersdictNone列转换函数字典。
parse_datesbool, list, dictFalse解析日期列。
date_parserfunctionNone自定义日期解析函数。
thousandsstrNone数字中的千分位分隔符。
skiprowsint, list-likeNone跳过的行数或行号列表。
skipfooterint0文件末尾跳过的行数。
nrowsintNone读取的行数。
na_valuesscalar, str, list-like, dictNone指定缺失值的标记。
keep_default_naboolTrue是否保留缺失值标记。
convert_floatboolTrue是否将浮点数转换为float类型。
json_normalizeboolFalse是否将嵌套JSON数据展平。
storage_optionsdictNone存储选项,用于文件系统或其他外部存储。

写入:

# 写入到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_writerstr, ExcelWriterNoneExcel文件路径或 ExcelWriter 对象,用于保存文件。
sheet_namestr‘Sheet1’要写入的工作表名称。
na_repstr‘’替换缺失值的字符串。
float_formatstrNone浮点数的格式字符串。
columnssequence, optionalNone指定要写入文件的列。如果为 None,则写入所有列。
headerbool, list of strTrue是否写入列名。如果为布尔值,表示是否写入列名。如果为列表,指定列名。
indexboolTrue是否写入行索引。
index_labelstr, sequence, or NoneNone行索引的标签。
startrowint0写入数据的起始行。
startcolint0写入数据的起始列。
engine{‘xlsxwriter’, ‘openpyxl’, ‘odf’, ‘xlwt’}NoneExcel写入引擎。选择用于写入Excel文件的引擎。
merge_cellsboolTrue是否合并单元格。
encodingstrNone文件的编码格式。
date_formatstrNone日期格式。
datetime_formatstrNonedatetime 对象的格式。
sheet_namestr‘Sheet1’要写入的工作表名称。
engine{‘xlsxwriter’, ‘openpyxl’, ‘odf’, ‘xlwt’}NoneExcel写入引擎。选择用于写入Excel文件的引擎。
optionsdictNone存储选项,用于文件系统或其他外部存储。

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 合并在一起,可以处理不同的轴和连接方式(如外连接、内连接)。

主要参数:

参数名类型默认值描述
objslist of DataFrameNone要拼接的 DataFrame 对象列表。
axisint0指定拼接的轴,0 为行方向(增加行数),1 为列方向(增加列数)。
join{‘inner’, ‘outer’}‘outer’指定连接方式,'inner' 表示内连接,'outer' 表示外连接。
ignore_indexboolFalse是否忽略原有的行索引,重新生成新的行索引。
keyslistNone生成层次化索引的键。

示例:

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 进行连接,支持多种合并方式,包括内连接、外连接、左连接和右连接。

主要参数:

参数名类型默认值描述
leftDataFrameNone左侧 DataFrame。
rightDataFrameNone右侧 DataFrame。
how{‘left’, ‘right’, ‘outer’, ‘inner’}‘inner’合并方式:'left''right''outer''inner'
onstr, list of strNone用于合并的列名。如果列名不同,可以使用 left_onright_on 参数。
left_onstr, list of strNone左侧 DataFrame 中用于合并的列名。
right_onstr, list of strNone右侧 DataFrame 中用于合并的列名。
left_indexboolFalse是否使用左侧 DataFrame 的索引进行合并。
right_indexboolFalse是否使用右侧 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       2       4
1   C       3       5

🟢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_datetimearg, format, errors将日期时间字符串转换为 datetime 对象。
pd.date_rangestart, end, freq, periods创建指定频率的日期时间索引。

(2)日期时间属性访问

方法/属性主要参数描述
.dt.year-获取年份
.dt.month-获取月份
.dt.day-获取日期
.dt.hour-获取小时
.dt.minute-获取分钟
.dt.second-获取秒数
.dt.weekday()-获取星期几,0 表示星期一
.dt.strftime()format按指定格式格式化日期时间对象为字符串。

(3)时间差和时间计算

方法/属性主要参数描述
Timedeltadays, hours, minutes创建时间差对象。
pd.DateOffsetdays, months, years创建日期偏移对象,添加或减去时间。

(4)日期时间索引和重采样

方法/属性主要参数描述
pd.date_rangestart, 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-22
print(ts.strftime('%d/%m/%Y'))  # 22/07/2024
print(ts.strftime('%I:%M %p'))  # 10:30 AM

版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐