DataFrame按条件筛选、修改数据:
DataFrame按条件筛选、修改数据:df.loc[]拓展
创建一个DataFrame
先通过字典创建一个学生信息的DataFrame。
import pandas as pd Student_dict = {'姓名':['张三', '李四', '王五', '赵六'], '性别':['男', '女', '男', '女'], '年龄':[20, 21, 19, 18], 'Python成绩':[70, 80, 90, 50], '评价':['良好', '良好', '良好', '良好'], '地址':['A小区10幢', 'A小区11幢','B小区10幢','C小区11幢']}
字典创建DataFrame,字典键变DataFrame的列名
df = pd.DataFrame(data=Student_dict, index=['a','b','c','d'])
df.loc[]按某列条件筛选行数据
df.loc[]可以通过布尔列表筛选行数据。比如筛选前两行数据:
df.loc[[True, True, False, False]]
通过布尔列表的方式,可以衍生出下面按条件的选取方式。比如筛选Python成绩>75的学生:
df.loc[df['Python成绩'] > 75] # df.loc[]删选Python成绩>75的学生
除了单个条件,也可以用两个条件筛选数据。比如筛选Python成绩>75的学生,并且年龄>20的学生:
df.loc[(df['Python成绩'] > 75) & (df['年龄'] > 20)] # df.loc[]删选Python成绩>75的学生,并且年龄>20的学生
注:df.loc[]多条件删选数据时,不同条件需要用(),连接条件如果是且符号是'&',连接条件如果是或符号是'|'。
df.loc[]按某列条件筛选并修改行数据
上面我们学习了如何筛选数据,那么如何筛选并改变数据呢?
日常工作中我们常常需要通过某个条件,去改变DataFrame数据。
比如,我想把Python成绩>=90的学习,评价设置为'优秀':
df.loc[df['Python成绩'] >= 90, '评价'] = '优秀'
df.loc[]筛选并改变数据,需要输入两个参数:
- 参数1:筛选的条件。
- 参数2:要改变列的列名。
判断某列数据中是否包含特定字符串或字符串列表
拓展一下df.loc[]筛选数据时常用的条件,判断某列数据中是否包含特定字符串或字符串列表。
比如我想筛选地址包含'A小区'的学生,应该怎么操作?
比如我想筛选地址包含'A小区'或'B小区'的学生,应该怎么操作?
判断某列数据中是否包含特定字符串
筛选地址包含'A小区'的学生:
df.loc[df['地址'].str.contains('A小区')] # df.loc[]删选地址中包含A小区的学生
df['地址'].str.contains('A小区')说明: df['地址'].str,就是对df['地址']进行str操作,str下有很多很多方法,其中contains()是其中一种方法,作用是用来判断是否包含'A小区'。 df['xx'].str除了contains方法外,还有cat、split、partition、rpartition、get、slice、slice_replace、join、startswith、endswith、match、replace、repeat、pad、zfill等等方法。
判断某列数据中是否包含特定字符串列表
筛选地址包含'A小区'或'B小区'的学生:
聪明的同学会想到先获取'A小区'的学生,再获取'B小区'的学生,这是可行的。
不过怎样可以一步实现呢?直接放入列表行不行?让我们来试一下。
直接放入列表试试:
xiaoqu_list = ['A小区', 'B小区'] df.loc[df['地址'].str.contains(xiaoqu_list)] TypeError: unhashable type: 'list'
报错啦,不支持输入列表。
解决方法是将列表用'|'进行连接,这样就可以一次性筛选出来了。
xiaoqu_list = ['A小区', 'B小区'] xiaoqu_str = '|'.join(xiaoqu_list) df[df['地址'].str.contains(xiaoqu_str)]
说明:
'|'.join(xiaoqu_list),是将xiaoqu_list列表用'|'拼接起来,生成一个str字符串。然后就可以一次性筛选地址包含'A小区'或'B小区'的学生了。
根据 dataframe 多条件修改多列
借方数量 | 贷方数量 | 数量单位 |
---|---|---|
100 | 1000 | 公斤 |
0.2 | 2 | 吨 |
300 | 3000 | 公斤 |
0.4 | 4 | 吨 |
500 | 5000 | 公斤 |
需求: 将上表中 单位为公斤 的 数量 化成 吨 ,将 单位改为 吨
借方数量 | 贷方数量 | 数量单位 |
---|---|---|
0.1 | 1 | 吨 |
0.2 | 2.0 | 吨 |
0.3 | 3 | 吨 |
0.4 | 4.0 | 吨 |
0.5 | 5 | 吨 |
def exec_func(df): if df['标准单位'].strip() == '公斤': # and (df['借方数量'] != 0 or df['贷方数量'] != 0) return pd.Series([df['借方数量']/1000, df['贷方数量']/1000, '吨']) else: return pd.Series([df['借方数量'], df['贷方数量'], '吨'])
df[['借方数量', '贷方数量', '标准单位']] = df.apply(exec_func, axis=1)
合集:
python_django
分类:
编程相关 / Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了