Pandas高级操作,建议收藏(一)

news/2024/11/28 23:56:47/

在数据分析和数据建模的过程中需要对数据进行清洗和整理等工作,有时需要对数据增删字段。下面为大家介绍Pandas对数据的复杂查询、数据类型转换、数据排序的使用。

 复杂查询

实际业务需求往往需要按照一定的条件甚至复杂的组合条件来查询数据,接下来为大家介绍如何发挥Pandas数据筛选的无限可能,随心所欲地取用数据。

1、逻辑运算

# Q1成绩大于36
df.Q1> 36
# Q1成绩不小于60分,并且是C组成员
~(df.Q1< 60) & (df['team'] == 'C') 

2、逻辑筛选数据

切片([ ])、.loc[ ]和.iloc[ ]均支持上文所介绍的逻辑表达式。

以下是切片([ ])的逻辑筛选示例:

df[df['Q1']== 8] # Q1等于8
df[~(df['Q1']== 8)] # 不等于8
df[df.name== 'Ben'] # 姓名为Ben
df[df.Q1> df.Q2] 

以下是.loc[ ]和.lic[ ]示例:

# 表达式与切片一致
df.loc[df['Q1']> 90, 'Q1':] # Q1大于90,只显示Q1
df.loc[(df.Q1> 80) & (df.Q2 < 15)] # and关系
df.loc[(df.Q1> 90) | (df.Q2 < 90)] # or关系
df.loc[df['Q1']== 8] # 等于8
df.loc[df.Q1== 8] # 等于8
df.loc[df['Q1']> 90, 'Q1':] # Q1大于90,显示Q1及其后所有列

3、函数筛选

# 查询最大索引的值
df.Q1[lambdas: max(s.index)] # 值为21
# 计算最大值
max(df.Q1.index)
# 99
df.Q1[df.index==99]

4、比较函数

# 以下相当于 df[df.Q1 == 60]
df[df.Q1.eq(60)]
df.ne() # 不等于 !=
df.le() # 小于等于 <=
df.lt() # 小于 <
df.ge() # 大于等于 >=
df.gt() # 大于 >

5、查询df.query()

df.query('Q1 > Q2 > 90') # 直接写类型SQL where语句

还支持使用@符引入变量

# 支持传入变量,如大于平均分40分的
a = df.Q1.mean()
df.query('Q1 > @a+40')
df.query('Q1 > `Q2`+@a')

df.eval()与df.query()类似,也可以用于表达式筛选。

# df.eval()用法与df.query类似
df[df.eval("Q1 > 90 > Q3 >10")]
df[df.eval("Q1 > `Q2`+@a")]

6、筛选df.filter()

df.filter(items=['Q1', 'Q2']) # 选择两列
df.filter(regex='Q', axis=1) # 列名包含Q的列
df.filter(regex='e$', axis=1) # 以e结尾的列
df.filter(regex='1$', axis=0) # 正则,索引名以1结尾
df.filter(like='2', axis=0) # 索引中有2的
# 索引中以2开头、列名有Q的
df.filter(regex='^2',axis=0).filter(like='Q', axis=1)

7、按数据类型查询

df.select_dtypes(include=['float64']) # 选择float64型数据
df.select_dtypes(include='bool')
df.select_dtypes(include=['number']) # 只取数字型
df.select_dtypes(exclude=['int']) # 排除int类型
df.select_dtypes(exclude=['datetime64'])

数据类型转换

在开始数据分析前,我们需要为数据分配好合适的类型,这样才能够高效地处理数据。不同的数据类型适用于不同的处理方法。

# 对所有字段指定统一类型
df = pd.DataFrame(data, dtype='float32')
# 对每个字段分别指定
df = pd.read_excel(data, dtype={'team':'string', 'Q1': 'int32'})

1、推断类型

# 自动转换合适的数据类型
df.infer_objects() # 推断后的DataFrame
df.infer_objects().dtypes

2、指定类型

# 按大体类型推定
m = ['1', 2, 3]
s = pd.to_numeric(s) # 转成数字
pd.to_datetime(m) # 转成时间
pd.to_timedelta(m) # 转成时间差
pd.to_datetime(m, errors='coerce') # 错误处理
pd.to_numeric(m, errors='ignore')
pd.to_numeric(m errors='coerce').fillna(0) # 兜底填充
pd.to_datetime(df[['year', 'month', 'day']])
# 组合成日期

3、类型转换astype()

df.Q1.astype('int32').dtypes
# dtype('int32')
df.astype({'Q1': 'int32','Q2':'int32'}).dtypes

4、转为时间类型

t = pd.Series(['20200801', '20200802'])

数据排序

数据排序是指按一定的顺序将数据重新排列,帮助使用者发现数据的变化趋势,同时提供一定的业务线索,还具有对数据纠错、分类等作用。

1、索引排序df.sort_index()

s.sort_index() # 升序排列
df.sort_index() # df也是按索引进行排序
df.team.sort_index()s.sort_index(ascending=False)# 降序排列
s.sort_index(inplace=True) # 排序后生效,改变原数据
# 索引重新0-(n-1)排,很有用,可以得到它的排序号
s.sort_index(ignore_index=True)
s.sort_index(na_position='first') # 空值在前,另'last'表示空值在后
s.sort_index(level=1) # 如果多层,排一级
s.sort_index(level=1, sort_remaining=False) #这层不排
# 行索引排序,表头排序
df.sort_index(axis=1) # 会把列按列名顺序排列

2、数值排序sort_values()

df.Q1.sort_values()
df.sort_values('Q4')
df.sort_values(by=['team', 'name'],ascending=[True, False])

其他方法:

s.sort_values(ascending=False) # 降序
s.sort_values(inplace=True) # 修改生效
s.sort_values(na_position='first') # 空值在前
# df按指定字段排列
df.sort_values(by=['team'])
df.sort_values('Q1')
# 按多个字段,先排team,在同team内再看Q1
df.sort_values(by=['team', 'Q1'])
# 全降序
df.sort_values(by=['team', 'Q1'], ascending=False)
# 对应指定team升Q1降
df.sort_values(by=['team', 'Q1'],ascending=[True, False])
# 索引重新0-(n-1)排
df.sort_values('team', ignore_index=True)

3、混合排序

df.set_index('name', inplace=True) # 设置name为索引
df.index.names = ['s_name'] # 给索引起名
df.sort_values(by=['s_name', 'team']) # 排序

4、按值大小排序nsmallest()和nlargest()

s.nsmallest(3) # 最小的3个
s.nlargest(3) # 最大的3个
# 指定列
df.nlargest(3, 'Q1')
df.nlargest(5, ['Q1', 'Q2'])
df.nsmallest(5, ['Q1', 'Q2'])


http://www.ppmy.cn/news/39225.html

相关文章

UE4 C++编写自定义动画蓝图节点

UE中自带的动画蓝图节点有限&#xff0c;在实现一些功能时需要通过C编写一些自定义的动画蓝图节点&#xff0c;本文就来讲解其基础实现&#xff0c;自定义节点最终效果如下&#xff1a; 源文件下载&#xff1a;https://download.csdn.net/download/grayrail/87654290 1.流程简…

【华为OD机试真题】猜字谜(javapython)

猜字谜 时间限制:1s空间限制:256MB 限定浯言:不限 题目描述: 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩 家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,…

mac电脑配置adb

1、打开mac的terminal终端&#xff0c;输入 cd ~/ 2、输入 touch .bash_profile&#xff0c;如果没有.bash_profile这个文件&#xff0c;则创建一个这个文件 3、输入 open .bash_profile &#xff0c;打开创建的.bash_profile 文件&#xff0c;此时应该弹出一个文本编辑框&am…

【问题解决】glob.glob 如何匹配所有子文件夹下的文件 —— recursive=True

一、仅匹配一级目录下的文件 import glob label_dir /data/part1/dir1/*.txt datas glob.glob(label_dir) print(datas) >>> [/data/part1/dir1/001.txt, /data/part1/dir1/002.txt]二、匹配多级文件夹下的文件 glob 模块在 python3.5 之后就支持了匹配所有子文件…

JavaSE基础(18) 继承

继承 概念 生活中我们经常听到一些名词&#xff0c;譬如富二代&#xff0c;官二代&#xff0c;红二代&#xff0c;穷二代&#xff0c;农二代等等&#xff0c;它代表中人与人之间的一种关系。那么程序当中怎么表示这种关系呢&#xff1f; 概念&#xff1a;描述两个类的关系的…

操作系统的概念、功能、目标

1.操作系统的层次结构 2.操作系统的概念 负责管理协调硬件和软件等计算机资源的操作 为上层的应用系统、用户提供简单易用的服务 操作系统是系统软件&#xff0c;而不是硬件 3.操作系统的功能与目标 先放一张思维导图&#xff0c;大概知道操作系统的具体功能和目标&#x…

企业敏感数据保护

数据风险评估 组织经常处理大量敏感数据;例如&#xff0c;医疗保健组织处理大量敏感的患者信息。如果未存储在安全位置&#xff0c;攻击者可能会利用此信息。 数据风险评估是指评估组织关键数据的存储位置的过程。它涉及根据文件的敏感性对文件进行分类并为它们提供必要的安全…

Qt配置Libtorch并简单测试

文章目录软件版本一、下载Libtorch二、配置Qt Creator三、测试项目参考&#xff1a;纯小白初次学习深度学习&#xff0c;根据目前所学、所查资料总结该配置文章&#xff0c;如有更好的方法将深度学习模型通过C部署到实际工程中&#xff0c;希望学习交流。 软件版本 Python3.1…