import pandas as pd
# 1. 表的列索引
# 列索引是最常见的索引形式,一般通过[]来实现。通过[列名]可以从DataFrame中取出相应的列,返回值为Series,例如从表中取出姓名一列:
df = pd.read_csv('D:/pandas_rui/joyful-pandas/data/learn_pandas.csv',
usecols=['School', 'Grade', 'Name', 'Gender', 'Weight', 'Transfer'])
print(df['Name'].head()) # 返回值为Series
# 0 Gaopeng Yang
# 1 Changqiang You
# 2 Mei Sun
# 3 Xiaojuan Sun
# 4 Gaojuan You
# Name: Name, dtype: object
# 如果要取出多个列,则可以通过[列名组成的列表],其返回值为一个DataFrame,例如从表中取出性别和姓名两列:
print(df[['Gender', 'Name']].head()) # 返回值为一个DataFrame
# Gender Name
# 0 Female Gaopeng Yang
# 1 Male Changqiang You
# 2 Male Mei Sun
# 3 Female Xiaojuan Sun
# 4 Male Gaojuan You
# 此外,若要取出单列,且列名中不包含空格,则可以用.列名取出,这和[列名]是等价的:
print(df.Name.head()) # 列名中不包含空格
# 0 Gaopeng Yang
# 1 Changqiang You
# 2 Mei Sun
# 3 Xiaojuan Sun
# 4 Gaojuan You
# Name: Name, dtype: object
# 2. 序列的行索引
# 【a】以字符串为索引的Series
# 如果取出单个索引的对应元素,则可以使用[item],若Series只有单个值对应,则返回这个标量值,如果有多个值对应,则返回一个Series:
s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'a', 'a', 'a', 'c']) # Series第一个参数一直都是列表 VS DataFrame是字典列表
print(s)
print(s['a'])
# a 1
# a 3
# a 4
# a 5
# dtype: int64
print(s['b'])
# 2
# 如果取出多个索引的对应元素,则可以使用[items的列表]:
# s[['c', 'b']]
# c 6
# b 2
# dtype: int64
# 如果想要取出某两个索引之间的元素,并且这两个索引是在整个索引中唯一出现,则可以使用切片,,同时需要注意这里的切片会包含两个端点:
print(s['c': 'b': -2]) # 包含两个端点
# c 6
# a 4
# b 2
# dtype: int64
print(s['b': 'c':2]) # 包含两个端点
# b 2
# a 4
# c 6
# dtype: int64
# 如果前后端点的值重复出现,那么需要经过排序才能使用切片:
try:
s['a': 'b']
except Exception as e:
Err_Msg = e
print(Err_Msg)
# KeyError("Cannot get left slice bound for non-unique label: 'a'")
print(s.sort_index()['a': 'b'])
# a 1
# a 3
# a 4
# a 5
# b 2
# dtype: int64
# 【b】以整数为索引的Series
# 在使用数据的读入函数时,如果不特别指定所对应的列作为索引,那么会生成从0开始的整数索引作为默认索引。当然,任意一组符合长度要求的整数都可以作为索引。
# 和字符串一样,如果使用[int]或[int_list],则可以取出对应索引元素的值:
s = pd.Series(['a', 'b', 'c', 'd', 'e', 'f'], index=[1, 3, 1, 2, 5, 4])
# s[1]
# 1 a
# 1 c
# dtype: object
# s[[2,3]]
# 2 d
# 3 b
# dtype: object
# 如果使用整数切片,则会取出对应索引位置的值,注意这里的整数切片同Python中的切片一样不包含右端点:
print(s[1:-1:2]) # 不包含右端点
# 3 b
# 2 d
# dtype: object
# 【WARNING】关于索引类型的说明
# 如果不想陷入麻烦,那么请不要把纯浮点以及任何混合类型(字符串、整数、浮点类型等的混合)作为索引,否则可能会在具体的操作时报错或者返回非预期的结果,并且在实际的数据分析中也不存在这样做的动机。
# 【END】
# 3. loc索引器
# 前面讲到了对DataFrame的列进行选取,下面要讨论其行的选取。
# 对于表而言,有两种索引器,
# 一种是基于元素的loc索引器, 元素
# 另一种是基于位置的iloc索引器。 整数
# loc索引器的一般形式是loc[*, *],其中第一个*代表行的选择,第二个*代表列的选择,
# 如果省略第二个位置写作loc[*],这个*是指行的筛选。其中,*的位置一共有五类合法对象,分别是:单个元素、元素列表、元素切片、布尔列表以及函数,下面将依次说明。
# 为了演示相应操作,先利用set_index方法把Name列设为索引,关于该函数的其他用法将在多级索引一章介绍。
df_demo = df.set_index('Name')
print(df_demo.head())
# School Grade Gender Weight Transfer
# Name
# Gaopeng Yang Shanghai Jiao Tong University Freshman Female 46.0 N
# Changqiang You Peking University Freshman Male 70.0 N
# Mei Sun Shanghai Jiao Tong University Senior Male 89.0 N
# Xiaojuan Sun Fudan University Sophomore Female 41.0 N
# Gaojuan You Fudan University Sophomore Male 74.0 N
# 【a】*为单个元素
# 此时,直接取出相应的行或列,如果该元素在索引中重复则结果为DataFrame,否则为Series:
print(df_demo.loc['Qiang Sun']) # 多个人叫孙强 该元素在索引中重复则结果为DataFrame 基于元素的loc索引器,行
# School Grade Gender Weight Transfer
# Name
# Qiang Sun Tsinghua University Junior Female 53.0 N
# Qiang Sun Tsinghua University Sophomore Female 40.0 N
# Qiang Sun Shanghai Jiao Tong University Junior Female NaN N
print(df_demo.loc['Quan Zhao']) # 赵权唯一 该元素在索引中唯一则结果为Series 基于元素的loc索引器,行
# School Shanghai Jiao Tong University
# Grade Junior
# Gender Female
# Weight 53.0
# Transfer N
# Name: Quan Zhao, dtype: object
# 也可以同时选择行和列:
print(df_demo.loc['Qiang Sun', 'School']) # 返回Series 基于元素的loc索引器,行 列
# Name
# Qiang Sun Tsinghua University
# Qiang Sun Tsinghua University
# Qiang Sun Shanghai Jiao Tong University
# Name: School, dtype: object
print(df_demo.loc['Quan Zhao', 'School']) # 返回单个元素 基于元素的loc索引器,行 列
# 'Shanghai Jiao Tong University'
# 【b】*为元素列表
# 此时,取出列表中所有元素值对应的行或列:
print(df_demo.loc[['Qiang Sun', 'Quan Zhao'], ['School', 'Gender']]) # 取特定多行多列
# School Gender
# Name
# Qiang Sun Tsinghua University Female
# Qiang Sun Tsinghua University Female
# Qiang Sun Shanghai Jiao Tong University Female
# Quan Zhao Shanghai Jiao Tong University Female
# 【c】*为切片
# 之前的Series使用字符串索引时提到,如果是唯一值的起点和终点字符,那么就可以使用切片,并且包含两个端点,如果不唯一则报错:
print(df_demo.loc['Gaojuan You':'Gaoqiang Qian', 'School':'Gender'])
# School Grade Gender
# Name
# Gaojuan You Fudan University Sophomore Male
# Xiaoli Qian Tsinghua University Freshman Female
# Qiang Chu Shanghai Jiao Tong University Freshman Female
# Gaoqiang Qian Tsinghua University Junior Female
# 需要注意的是,如果DataFrame使用整数索引,其使用整数切片的时候和上面字符串索引的要求一致,都是元素切片,包含端点且起点、终点不允许有重复值。
df_loc_slice_demo = df_demo.copy()
df_loc_slice_demo.index = range(df_demo.shape[0], 0, -1)
print(df_loc_slice_demo.loc[5:3])
# School Grade Gender Weight Transfer
# 5 Fudan University Junior Female 46.0 N
# 4 Tsinghua University Senior Female 50.0 N
# 3 Shanghai Jiao Tong University Senior Female 45.0
pandas_rui_sql.zip
需积分: 0 22 浏览量
更新于2023-05-21
收藏 71KB ZIP 举报
《Pandas与SQL:数据处理的双剑合璧》
在大数据时代,高效的数据处理工具是每个分析师和数据科学家的必备武器。Pandas和SQL,作为数据处理领域中的两大巨头,各自有着独特的优势。Pandas是Python编程语言中的一个强大库,而SQL则是用于管理和处理关系型数据库的语言。本文将深入探讨Pandas与SQL的关系,以及如何在实际工作中结合使用它们,以实现更高效的数据操作。
Pandas以其易用性和灵活性著称。它的DataFrame对象是一种二维表格型数据结构,可以存储各种类型的数据,并提供了丰富的数据分析功能。例如,通过Pandas,我们可以轻松完成数据清洗、数据转换、统计分析等任务。Pandas的merge、join、groupby等函数使得数据处理变得简单直观,极大地提高了数据科学家的工作效率。
然而,当数据量达到一定规模时,内存限制可能会成为Pandas的瓶颈。这时,SQL的作用就显现出来。SQL(Structured Query Language)是一种用于处理关系型数据库的标准语言,它能够对大型数据集进行快速查询和操作,而无需一次性加载所有数据到内存。SQL支持的SELECT、INSERT、UPDATE、DELETE等语句,使得我们能以声明式的方式对数据库进行操作,有效地管理和检索大量数据。
那么,如何将Pandas与SQL结合使用呢?一种常见的方式是利用Pandas的read_sql_query或read_sql_table函数读取SQL查询结果,将数据库中的数据转换为DataFrame,然后在Pandas中进行进一步的分析。同时,Pandas的to_sql函数则可以将DataFrame写入SQL数据库,实现了数据的导入导出。这种结合方式既利用了Pandas的便捷性,又发挥了SQL的大数据处理能力。
此外,还可以使用Python的数据库连接库,如psycopg2(PostgreSQL)、pyodbc(ODBC)等,来实现Pandas与SQL的交互。通过这些库,我们可以执行自定义的SQL查询,并将结果返回给Pandas进行后续处理。例如,对于复杂的数据清洗和预处理工作,可以在SQL中完成初步的筛选和转换,再用Pandas进行深度分析。
在实际项目中,Pandas与SQL的协同使用可以形成一种灵活且强大的数据处理流程。比如,在数据科学项目初期,可能需要使用Pandas快速探索和清洗数据;随着项目进展,当数据量增大,可以利用SQL进行数据存储和批量处理;将SQL处理的结果再导入Pandas进行模型训练和验证。这种结合方式使得我们能够在不同阶段选择最适合的工具,提高工作效率。
Pandas和SQL各有其优势,了解并掌握两者之间的配合,将使你在数据处理的道路上如虎添翼。无论是数据的导入导出,还是数据的分析与存储,都能够灵活应对,实现高效的数据工作流程。
smile_8887
- 粉丝: 0
- 资源: 1
最新资源
- 毕设和企业适用springboot社交应用平台类及虚拟人类交互系统源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及智能会议管理平台源码+论文+视频.zip
- 毕设和企业适用springboot商城类及城市智能运营平台源码+论文+视频.zip
- 毕设和企业适用springboot商城类及车联网管理平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及食品配送平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及视频监控系统源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及视频内容分发平台源码+论文+视频.zip
- 毕设和企业适用springboot社交应用平台类及云计算资源管理平台源码+论文+视频.zip
- 毕设和企业适用springboot社交应用平台类及用户反馈平台源码+论文+视频.zip
- 毕设和企业适用springboot社交应用平台类及用户数据分析平台源码+论文+视频.zip
- 毕设和企业适用springboot商城类及个性化推荐系统源码+论文+视频.zip
- 毕设和企业适用springboot商城类及电子产品维修平台源码+论文+视频.zip
- 毕设和企业适用springboot商城类及风险控制平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及数据存储平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及数据智能化平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及投票平台源码+论文+视频.zip