我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文探讨dataframe里面数据查询刷选的方法,这个需求的实现写法其实很多,在这里做个简单的总结。并不涉及机器学习数据预测之类的事情。仅仅是个数据查询的文章。

苏南大叔:数据处理,对dataframe数据进行查询筛选的方法总结 - dataframe查询筛选
数据处理,对dataframe数据进行查询筛选的方法总结(图1-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4

龙套数据

龙套数据,依然是苏南大叔的宠物列表:

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, "狗"],
        ['老许', 3, "猫"],
        ['二赖子', 6, "狗"],
        ['老白', 6, "猫"],
        ['小黑', 5, "狗"],
    ],
    columns = ['name', 'weight', 'category']
)

前文回顾

最基础的数据查询方法依然是.loc().iloc(),或者使用.at().iat()。参考文章:

f1 = df.loc[:, "name"]
f2 = df.iloc[:, 0]
f3 = df.at[0, "name"]
f4 = df.iat[0, 0]
print(f1)
print(f2)
print(f3)
print(f4)

输出:

0     虎子
1     老许
2    二赖子
3     老白
4     小黑
Name: name, dtype: object
0     虎子
1     老许
2    二赖子
3     老白
4     小黑
Name: name, dtype: object

虎子
虎子

接下来要展示的是多条件复杂数据查询的方案,每个方案的返回值都一样。所以,具体使用哪种写法,大家就具体问题具体分析了。

方案一,df[]

data = df[df['weight'] >= 5]
print(data)

data = df[ (df['weight'] >= 5) & (df['category'] =='猫') ]
print(data)

data = df[ (df['weight'] >= 5) | (df['category'] =='猫') ]
print(data)

输出:

    name  weight category
2  二赖子      6        狗
3   老白       6        猫
4   小黑       5        狗

    name  weight category
3   老白       6        猫

    name  weight category
1   老许       3        猫
2  二赖子      6        狗
3   老白       6        猫
4   小黑       5        狗

方案二,df.loc[]

data = df.loc[df['weight'] >= 5]
print(data)

data = df.loc[(df['weight'] >= 5) & (df['category'] == '猫')]
print(data)

data = df.loc[(df['weight'] >= 5) | (df['category'] == '猫')]
print(data)

输出同上。

方案三,df.query()

data = df.query('weight >= 5')
print(data)

data = df.query('weight >= 5 & category=="猫"')
print(data)

data = df.query('weight >= 5 | category=="猫"')
print(data)

输出同上。

方案四,df[df[field].isin()]

data = df[df['weight'].isin([5, 6])]
print(data)

data = df[ (df['weight'].isin([5, 6]) & (df['category'] =='猫'))]
print(data)

data = df[ (df['weight'].isin([5, 6]) | (df['category'] =='猫'))]
print(data)

输出同上。

方案五,df[df[field].map(lambda)]

data = df[df['weight'].map(lambda x: x >= 5)]
print(data)

data = df[df['weight'].map(lambda x:(x >= 5)) & df['category'].map(lambda x:x=='猫')]
print(data)

data = df[df['weight'].map(lambda x:(x >= 5)) | df['category'].map(lambda x:x=='猫')]
print(data)

输出同上。

方案六,df[df.apply(func, axis=1)]

def ok(row):
    return (row['weight'] >= 5)
data = df[df.apply(ok, axis=1)]
print(data)

def ok2(row):
    return (row['weight'] >= 5) & (row['category'] == '猫')
data = df[df.apply(ok2, axis=1)]
print(data)

def ok3(row):
    return (row['weight'] >= 5) | (row['category'] == '猫')
data = df[df.apply(ok3, axis=1)]
print(data)

输出同上。

结束语

网上的教程里面还会有applymap()的说法,目前这种方法已经被弃用了。更多苏南大叔的python经验文章,请参考下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python