当前位置: 首页 > article >正文

pandas-基础(数据结构及文件访问)

1 Pandas的数据结构

1.1 Series

特点:一维的数据型对象,包含一个值序列和数据标签(即索引)

创建Series:

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

参数说明:

  • data:Series 的数据部分,可以是列表、数组、字典、标量值等。如果不提供此参数,则创建一个空的 Series。
  • index:Series 的索引部分,用于对数据进行标记。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • dtype:指定 Series 的数据类型。可以是 NumPy 的数据类型,例如 np.int64np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
  • name:Series 的名称,用于标识 Series 对象。如果提供了此参数,则创建的 Series 对象将具有指定的名称。
  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。
  • fastpath:是否启用快速路径。默认为 False。启用快速路径可能会在某些情况下提高性能。

常用方法:

Series 方法

下面是 Series 中一些常用的方法:

方法名称功能描述
index获取 Series 的索引
values获取 Series 的数据部分(返回 NumPy 数组)
head(n)返回 Series 的前 n 行(默认为 5)
tail(n)返回 Series 的后 n 行(默认为 5)
dtype返回 Series 中数据的类型
shape返回 Series 的形状(行数)
describe()返回 Series 的统计描述(如均值、标准差、最小值等)
isnull()返回一个布尔 Series,表示每个元素是否为 NaN
notnull()返回一个布尔 Series,表示每个元素是否不是 NaN
unique()返回 Series 中的唯一值(去重)
value_counts()返回 Series 中每个唯一值的出现次数
map(func)将指定函数应用于 Series 中的每个元素
apply(func)将指定函数应用于 Series 中的每个元素,常用于自定义操作
astype(dtype)将 Series 转换为指定的类型
sort_values()对 Series 中的元素进行排序(按值排序)
sort_index()对 Series 的索引进行排序
dropna()删除 Series 中的缺失值(NaN)
fillna(value)填充 Series 中的缺失值(NaN)
replace(to_replace, value)替换 Series 中指定的值
cumsum()返回 Series 的累计求和
cumprod()返回 Series 的累计乘积
shift(periods)将 Series 中的元素按指定的步数进行位移
rank()返回 Series 中元素的排名
corr(other)计算 Series 与另一个 Series 的相关性(皮尔逊相关系数)
cov(other)计算 Series 与另一个 Series 的协方差
to_list()将 Series 转换为 Python 列表
to_frame()将 Series 转换为 DataFrame
iloc[]通过位置索引来选择数据
loc[]通过标签索引来选择数据

1.2 DataFrame

构造方法:

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

参数说明:

  • data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。
  • index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如 np.int64np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。

DataFrame 方法

DataFrame 的常用操作和方法如下表所示:

方法名称功能描述
head(n)返回 DataFrame 的前 n 行数据(默认前 5 行)
tail(n)返回 DataFrame 的后 n 行数据(默认后 5 行)
info()显示 DataFrame 的简要信息,包括列名、数据类型、非空值数量等
describe()返回 DataFrame 数值列的统计信息,如均值、标准差、最小值等
shape返回 DataFrame 的行数和列数(行数, 列数)
columns返回 DataFrame 的所有列名
index返回 DataFrame 的行索引
dtypes返回每一列的数值数据类型
sort_values(by)按照指定列排序
sort_index()按行索引排序
dropna()删除含有缺失值(NaN)的行或列
fillna(value)用指定的值填充缺失值
isnull()判断缺失值,返回一个布尔值 DataFrame
notnull()判断非缺失值,返回一个布尔值 DataFrame
loc[]按标签索引选择数据
iloc[]按位置索引选择数据
at[]访问 DataFrame 中单个元素(比 loc[] 更高效)
iat[]访问 DataFrame 中单个元素(比 iloc[] 更高效)
apply(func)对 DataFrame 或 Series 应用一个函数
applymap(func)对 DataFrame 的每个元素应用函数(仅对 DataFrame)
groupby(by)分组操作,用于按某一列分组进行汇总统计
pivot_table()创建透视表
merge()合并多个 DataFrame(类似 SQL 的 JOIN 操作)
concat()按行或按列连接多个 DataFrame
to_csv()将 DataFrame 导出为 CSV 文件
to_excel()将 DataFrame 导出为 Excel 文件
to_json()将 DataFrame 导出为 JSON 格式
to_sql()将 DataFrame 导出为 SQL 数据库
query()使用 SQL 风格的语法查询 DataFrame
duplicated()返回布尔值 DataFrame,指示每行是否是重复的
drop_duplicates()删除重复的行
set_index()设置 DataFrame 的索引
reset_index()重置 DataFrame 的索引
transpose()转置 DataFrame(行列交换)

数据选择和切片

函数说明
df[column_name]选择指定的列;
df.loc[row_index, column_name]通过标签选择数据;
df.iloc[row_index, column_index]通过位置选择数据;
df.ix[row_index, column_name]通过标签或位置选择数据;
df.filter(items=[column_name1, column_name2])选择指定的列;
df.filter(regex='regex')选择列名匹配正则表达式的列;
df.sample(n)随机选择 n 行数据。

索引设置

将索引重置成自然数-reset_index()

pandas中将索引重置成自然数的方法,不会改变原始数据的内容和排列顺序。

import pandas as pd
import numpy as np


print("\n")
print("reset_index")
df = pd.DataFrame({'Col-1': [1, 3, 5], 'Col-2': [5, 7, 9]}, index=['A', 'B', 'C'])
print("df:\n",df)
df1 = df.reset_index()
print("df1:\n",df1)

print("drop=True:\n",df.reset_index(drop=True))

'''
输出结果:
reset_index
df:
    Col-1  Col-2
A      1      5
B      3      7
C      5      9
df1:
   index  Col-1  Col-2
0     A      1      5
1     B      3      7
2     C      5      9
drop=True:
    Col-1  Col-2
0      1      5
1      3      7
2      5      9
'''
按照指定索引对齐当前数据-reindex()

reindex()是pandas中实现数据对齐的基本方法,对齐是指沿着指定轴,让数据与给定的一组标签(行列索引)进行匹配。

import pd as pandas

print("\n")
df = pd.DataFrame({'Col-1': [1, 3, 5], 'Col-2': [5, 7, 9]}, index=['A', 'B', 'C'])
print("df:\n",df)
# 默认传给labels参数
df2 = df.reindex(['C', 'B', 'A'])
print("df2:\n",df2)

'''
输出结果:
df:
    Col-1  Col-2
A      1      5
B      3      7
C      5      9
df2:
    Col-1  Col-2
C      5      9
B      3      7
A      1      5
'''

print("axis='columns'")
# 指定重设的是行索引还是列索引,默认是行索引
df3 = df.reindex(['Col-2', 'c3', 'Col-1'], axis='columns')
print("df3:\n",df3)
# 同时调整行和列
df4 = df.reindex(index=['C', 'B', 'A'], columns=['Col-2', 'c3', 'Col-1'])
print("df4:\n",df4)

'''
输出结果:
axis='columns'
df3:
    Col-2  c3  Col-1
A      5 NaN      1
B      7 NaN      3
C      9 NaN      5
df4:
    Col-2  c3  Col-1
C    9.0 NaN    5.0
B    7.0 NaN    3.0
A    5.0 NaN    1.0
'''
用另一个DataFrame的索引来更新当前DataFrame的索引-reindex_like()

如果是原数据中不存在的索引值,则默认填充空值NaN,也可以使用method参数设置向前填充还是向后填充。
注意:reindex_like()中没有fill_value参数,不支持用指定值填充。

import pd as pandas

dfa = pd.DataFrame({'Col-1': [1, 3, 5], 'Col-2': [5, 7, 9]}, index=['A', 'B', 'C'])
print("dfa:\n",dfa)
dfb = pd.DataFrame({'Col-1': [1, 3, 5, 7, 9], 'Col-2': [2, 4, 6, 8, 10]},
                   index=['A', 'B', 'C', 'D', 'E'])
print("dfb:\n" ,dfb, '\n', end='*'*30+'\n')
dfc = dfa.reindex_like(dfb)
print("dfc:\n",dfc)

'''
输出结果:
dfa:
    Col-1  Col-2
A      1      5
B      3      7
C      5      9
dfb:
    Col-1  Col-2
A      1      2
B      3      4
C      5      6
D      7      8
E      9     10 
******************************
dfc:
    Col-1  Col-2
A    1.0    5.0
B    3.0    7.0
C    5.0    9.0
D    NaN    NaN
E    NaN    NaN
'''

2 文件访问

2.1 csv文件

Pandas 可以很方便的处理 CSV 文件,常用方法有:

方法名称功能描述常用参数
pd.read_csv()从 CSV 文件读取数据并加载为 DataFramefilepath_or_buffer (路径或文件对象),sep (分隔符),header (行标题),names (自定义列名),dtype (数据类型),index_col (索引列)
DataFrame.to_csv()将 DataFrame 写入到 CSV 文件path_or_buffer (目标路径或文件对象),sep (分隔符),index (是否写入索引),columns (指定列),header (是否写入列名),mode (写入模式)

pd.read_csv() - 读取 CSV 文件

read_csv() 是从 CSV 文件中读取数据的主要方法,将数据加载为一个 DataFrame。

import pandas as pd

# 读取 CSV 文件,并自定义列名和分隔符
df = pd.read_csv('data.csv', sep=';', header=0, names=['A', 'B', 'C'], dtype={'A': int, 'B': float})
print(df)

read_csv 常用参数:

参数说明默认值
filepath_or_bufferCSV 文件的路径或文件对象(支持 URL、文件路径、文件对象等)必需参数
sep定义字段分隔符,默认是逗号(,),可以改为其他字符,如制表符(\t','
header指定行号作为列标题,默认为 0(表示第一行),或者设置为 None 没有标题0
names自定义列名,传入列名列表None
index_col用作行索引的列的列号或列名None
usecols读取指定的列,可以是列的名称或列的索引None
dtype强制将列转换为指定的数据类型None
skiprows跳过文件开头的指定行数,或者传入一个行号的列表None
nrows读取前 N 行数据None
na_values指定哪些值应视为缺失值(NaN)None
skipfooter跳过文件结尾的指定行数0
encoding文件的编码格式(如 utf-8latin1 等)None

df.to_csv() - 将 DataFrame 写入 CSV 文件

to_csv() 是将 DataFrame 写入 CSV 文件的方法,支持自定义分隔符、列名、是否包含索引等设置。

import pandas as pd

# 假设 df 是一个已有的 DataFrame
df.to_csv('output.csv', index=False, header=True, columns=['A', 'B'])

to_csv 常用参数:

参数说明默认值
path_or_bufferCSV 文件的路径或文件对象(支持文件路径、文件对象)必需参数
sep定义字段分隔符,默认是逗号(,),可以改为其他字符,如制表符(\t','
index是否写入行索引,默认 True 表示写入索引True
columns指定写入的列,可以是列的名称列表None
header是否写入列名,默认 True 表示写入列名,设置为 False 表示不写列名True
mode写入文件的模式,默认是 w(写模式),可以设置为 a(追加模式)'w'
encoding文件的编码格式,如 utf-8latin1None
line_terminator定义行结束符,默认为 \nNone
quoting设置如何对文件中的数据进行引号处理(0-3,具体引用方式可查文档)None
quotechar设置用于引用的字符,默认为双引号 "'"'
date_format自定义日期格式,如果列包含日期数据,则可以使用此参数指定日期格式None
doublequote如果为 True,则在写入时会将包含引号的文本使用双引号括起来True

2.2 Excel 文件

Pandas 提供了丰富的 Excel 文件操作功能,帮助我们方便地读取和写入 .xls.xlsx 文件,支持多表单、索引、列选择等复杂操作,是数据分析中必备的工具。

操作方法说明
读取 Excel 文件pd.read_excel()读取 Excel 文件,返回 DataFrame
将 DataFrame 写入 ExcelDataFrame.to_excel()将 DataFrame 写入 Excel 文件
加载 Excel 文件pd.ExcelFile()加载 Excel 文件并访问多个表单
使用 ExcelWriter 写多个表单pd.ExcelWriter()写入多个 DataFrame 到同一 Excel 文件的不同表单

pd.read_excel() - 读取 Excel 文件

pd.read_excel() 方法用于从 Excel 文件中读取数据并加载为 DataFrame。它支持读取 .xls.xlsx 格式的文件。

语法格式如下:

pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, 
                  usecols=None, dtype=None, engine=None, converters=None, 
                  true_values=None, false_values=None, skiprows=None, nrows=None, 
                  na_values=None, keep_default_na=True, na_filter=True, verbose=False, 
                  parse_dates=False, date_parser=<no_default>, date_format=None, 
                  thousands=None, decimal='.', comment=None, skipfooter=0, 
                  storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)

参数说明:

  • io:这是必需的参数,指定了要读取的 Excel 文件的路径或文件对象。

  • sheet_name=0:指定要读取的工作表名称或索引。默认为0,即第一个工作表。

  • header=0:指定用作列名的行。默认为0,即第一行。

  • names=None:用于指定列名的列表。如果提供,将覆盖文件中的列名。

  • index_col=None:指定用作行索引的列。可以是列的名称或数字。

  • usecols=None:指定要读取的列。可以是列名的列表或列索引的列表。

  • dtype=None:指定列的数据类型。可以是字典格式,键为列名,值为数据类型。

  • engine=None:指定解析引擎。默认为None,pandas 会自动选择。

  • converters=None:用于转换数据的函数字典。

  • true_values=None:指定应该被视为布尔值True的值。

  • false_values=None:指定应该被视为布尔值False的值。

  • skiprows=None:指定要跳过的行数或要跳过的行的列表。

  • nrows=None:指定要读取的行数。

  • na_values=None:指定应该被视为缺失值的值。

  • keep_default_na=True:指定是否要将默认的缺失值(例如NaN)解析为NA

  • na_filter=True:指定是否要将数据转换为NA

  • verbose=False:指定是否要输出详细的进度信息。

  • parse_dates=False:指定是否要解析日期。

  • date_parser=<no_default>:用于解析日期的函数。

  • date_format=None:指定日期的格式。

  • thousands=None:指定千位分隔符。

  • decimal='.':指定小数点字符。

  • comment=None:指定注释字符。

  • skipfooter=0:指定要跳过的文件末尾的行数。

  • storage_options=None:用于云存储的参数字典。

  • dtype_backend=<no_default>:指定数据类型后端。

  • engine_kwargs=None:传递给引擎的额外参数字典。

DataFrame.to_excel() - 将 DataFrame 写入 Excel 文件

to_excel() 方法用于将 DataFrame 写入 Excel 文件,支持 .xls.xlsx 格式。

语法格式如下:

DataFrame.to_excel(excel_writer, *, sheet_name='Sheet1', na_rep='', float_format=None, 
                   columns=None, header=True, index=True, index_label=None, startrow=0, 
                   startcol=0, engine=None, merge_cells=True, inf_rep='inf',
                   freeze_panes=None, storage_options=None, engine_kwargs=None)

参数说明:

  • excel_writer:这是必需的参数,指定了要写入的 Excel 文件路径或文件对象。

  • sheet_name='Sheet1':指定写入的工作表名称,默认为 'Sheet1'

  • na_rep='':指定在 Excel 文件中表示缺失值(NaN)的字符串,默认为空字符串。

  • float_format=None:指定浮点数的格式。如果为 None,则使用 Excel 的默认格式。

  • columns=None:指定要写入的列。如果为 None,则写入所有列。

  • header=True:指定是否写入列名作为第一行。如果为 False,则不写入列名。

  • index=True:指定是否写入索引作为第一列。如果为 False,则不写入索引。

  • index_label=None:指定索引列的标签。如果为 None,则不写入索引标签。

  • startrow=0:指定开始写入的行号,默认从第0行开始。

  • startcol=0:指定开始写入的列号,默认从第0列开始。

  • engine=None:指定写入 Excel 文件时使用的引擎,默认为 None,pandas 会自动选择。

  • merge_cells=True:指定是否合并单元格。如果为 True,则合并具有相同值的单元格。

  • inf_rep='inf':指定在 Excel 文件中表示无穷大值的字符串,默认为 'inf'

  • freeze_panes=None:指定冻结窗格的位置。如果为 None,则不冻结窗格。

  • storage_options=None:用于云存储的参数字典。

  • engine_kwargs=None:传递给引擎的额外参数字典。

ExcelFile - 加载 Excel 文件

ExcelFile 是一个用于读取 Excel 文件的类,它可以处理多个表单,并在不重新打开文件的情况下访问其中的数据。

语法格式如下:

excel_file = pd.ExcelFile('data.xlsx')

常用方法:

方法功能描述
sheet_names返回文件中所有表单的名称列表
parse(sheet_name)解析指定表单并返回一个 DataFrame
close()关闭文件,以释放资源

ExcelWriter - 写入 Excel 文件

ExcelWriter 是 pandas 提供的一个类,用于将 DataFrame 或 Series 对象写入 Excel 文件。使用 ExcelWriter,你可以在一个 Excel 文件中写入多个工作表,并且可以更灵活地控制写入过程。

语法格式如下:

pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', 
                   storage_options=None, if_sheet_exists=None, engine_kwargs=None)

参数说明:

  • path:这是必需的参数,指定了要写入的 Excel 文件的路径、URL 或文件对象。可以是本地文件路径、远程存储路径(如 S3)、URL 链接或已打开的文件对象。

  • engine:这是一个可选参数,用于指定写入 Excel 文件的引擎。如果为 None,则 pandas 会自动选择一个可用的引擎(默认优先选择 openpyxl,如果不可用则选择其他可用引擎)。常见的引擎包括 'openpyxl'(用于 .xlsx 文件)、'xlsxwriter'(提供高级格式化和图表功能)、'odf'(用于 OpenDocument 格式如 .ods)等。

  • date_format:这是一个可选参数,指定写入 Excel 文件中日期的格式字符串,例如 "YYYY-MM-DD"

  • datetime_format:这是一个可选参数,指定写入 Excel 文件中日期时间对象的格式字符串,例如 "YYYY-MM-DD HH:MM:SS"

  • mode:这是一个可选参数,默认为 'w',表示写入模式。如果设置为 'a',则表示追加模式,向现有文件中添加数据(仅支持部分引擎,如 openpyxl)。

  • storage_options:这是一个可选参数,用于指定与存储后端连接的额外选项,例如认证信息、访问权限等,适用于写入远程存储(如 S3、GCS)。

  • if_sheet_exists:这是一个可选参数,默认为 'error',指定如果工作表已经存在时的行为。选项包括 'error'(抛出错误)、'new'(创建一个新工作表)、'replace'(替换现有工作表的内容)、'overlay'(在现有工作表上覆盖写入)。

  • engine_kwargs:这是一个可选参数,用于传递给引擎的其他关键字参数。这些参数会传递给相应引擎的函数,例如 xlsxwriter.Workbook(file, **engine_kwargs)openpyxl.Workbook(**engine_kwargs) 等。


http://www.kler.cn/a/576228.html

相关文章:

  • BP神经网络终极进化:2025量子增强版Python实现(附元宇宙金融实战)
  • 深度学习(斋藤康毅)学习笔记(六)反向传播3
  • C#实现应用程序单个运行,防止重复启动
  • 算法随打:拼写单词
  • oracle通过dmp导入数据
  • 【JAVA架构师成长之路】【Redis】第17集:Redis热点Key问题分析与解决方案
  • 【CSS】Tailwind CSS 与传统 CSS:设计理念与使用场景对比
  • .NET高级应用---自定义Ioc容器(附带源码)
  • Qt6.8.2创建WebAssmebly项目使用FFmpeg资源
  • 论文阅读《TrustRAG: An Information Assistant with Retrieval AugmentedGeneration》
  • K8S学习之基础十四:k8s中Deployment控制器概述
  • 【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】
  • 从开源大模型工具Ollama存在安全隐患思考企业级大模型应用如何严守安全红线
  • Process-based Self-Rewarding Language Models 论文简介
  • React基础之组件
  • 开发环境搭建-完善登录功能
  • 系统架构评估方法-SAAM方法
  • C++20的简写函数模板
  • 初次使用 IDE 搭配 Lombok 注解的配置
  • Android APP 启动流程详解(含冷启动、热启动)