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)
posted @   冀未然  阅读(664)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示