python pandas数据筛选

python pandas数据筛选

0 背景

python pandas数据筛选

之前提到过WPS支持python: WPS支持python, 也对pandas提到了一些基础的操作, 因此, 本文依旧主要借助WPS平台对pandas的数据进行一些筛选查询操作。

1 使用

初始化数据

python pandas数据筛选

在WPS中初始化数据:

df = xl("$A$1:$G$18", headers=True, sheet_name="工作表1")
# 设置索引为uid列
df.set_index('uid',inplace=True)
print(df.head())

在python中初始化数据:

data = {  
    "uid": [123456789],  
    "uname": ["雷嘉伦""杜睿""孙晓明""方宇宁""彭睿""苏詩涵""宋子异""彭震南""钟宇宁"],  
    "usex": ["男""男""男""男""男""女""男""男""男"],  
    "uage": [798319311871475559],  
    "umail": ["lj712@mail.com""ruidu@hotmail.com""xiaomsun@gmail.com""""pengrui910@icloud.com"None"ziyso@gmail.com""zhepeng404@gmail.com""yuningzhong407@hotmail.com"],  
    "ucity": ["洛杉矶""广州市""纽约""深圳""纽约""东莞""中山""阿克伦""芝加哥"],  
    "udate": ["2001/11/13""2002/5/7""2010/8/9""2018/12/17""2017/4/3""2021/1/20""2001/6/18""2016/2/17""2014/3/15"]  
}
df = pd.DataFrame(data)
df.set_index('uid', inplace=True)

布尔索引

单个条件

筛选性别为女的数据

# 筛选性别为女的数据
df[df['usex']=='女']

筛选邮箱是空(NaN)的数据

会筛选NaN以及None的数据

# 筛选邮箱是空(NaN,None)等的数据
df[df['umail'].isna()]

# 筛选邮箱是空(None)的数据
df[df['umail'].isnull()]

多个条件

筛选性别为女, 而且年龄小于30的数据

# 筛选性别为女, 而且年龄小于30的数据
df[(df['uage'] < 30) & (df['usex'] == '女')]

筛选性别为女, 或者年龄小于30的数据

# 筛选性别为女, 或者年龄小于30的数据
df[(df['uage'] < 30) | (df['usex'] == '女')]

非, 城市不是深圳的数据

# 非
df[~(df['ucity']=='深圳')]

isin()

筛选城市在广州或者深圳的数据

# 使用`isin()`筛选城市在广州或者深圳的数据
df[df['ucity'].isin(['广州市','深圳'])]

复杂的条件筛选, 其他不符合的值为空

# 复杂的条件筛选, 其他不符合的值为空
df[df.isin({'ucity': ['广州市','深圳'], 'usex':['男']})]
 uname usex uage umail ucity udate
uid      
1 NaN 男 NaN NaN NaN NaN
2 NaN 男 NaN NaN 广州市 NaN
3 NaN 男 NaN NaN NaN NaN
4 NaN 男 NaN NaN 深圳 NaN
...

query()

df.query(expr) 函数是一个非常方便的数据筛选的方法,它允许我们使用字符串形式的表达式来查询DataFrame中的数据, 。表达式是一个字符串,类似于SQL中的where从句,使用非常灵活。

df.query('usex == "男"')

df.query('uage < 30')

df.query('(usex == "男") | (uage < 30)')

df.query('(usex == "男") & (uage < 30)')
df.query('(usex == "男") and (uage < 30)')

df.query('ucity in ("广州市","深圳")')

df.query('ucity not in ("广州市","深圳")')

df.query('usex != "男"')

# uid就是索引的字段名称
df.query('uid > 10')
df.query('index > 10')

# 使用外部变量, 使用@标识
uage = 22  
result = df.query('uage < @uage')

eval()

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

df[df.eval('usex == "男"')]

df[df.eval('uage < 30')]

df[df.eval('(usex == "男") | (uage < 30)')]

df[df.eval('(usex == "男") & (uage < 30)')]

filter()

df.filter()可以在行名和列名进行筛选,支持模糊匹配、正则表达式。

# 选择姓名和城市两列
df.filter(items=['uname''ucity'])

# 获取列名中包含ag的数据(uage)
df.filter(regex='ag', axis=1)
df.filter(like='ag', axis=1)

# 获取行索引中包含2的数据, (2,12)的数据
df.filter(like='2', axis=0)

# 获取行索引中开头是2的数据, (2)的数据
df.filter(regex='^2', axis=0)

select_dtypes()

pandas提供了一个按列数据类型筛选的功能 df.select_dtypes(include=None, exclude=None),它可以指定包含和不包含的数据类型,如果只有一个类型,可以传入字符;如果有多个类型,可以传入列表。

df.select_dtypes(include=['number'])

df.select_dtypes(include=['number','object'])

df.select_dtypes(exclude=['object'])

可以通过df.dtypes 查看数据类型.

2 关于

欢迎关注我的微信公众号


原文始发于微信公众号(其之):python pandas数据筛选

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204808.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!