数据处理,对dataframe数据进行查询筛选的方法总结
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文探讨dataframe
里面数据查询刷选的方法,这个需求的实现写法其实很多,在这里做个简单的总结。并不涉及机器学习数据预测之类的事情。仅仅是个数据查询的文章。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@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
经验文章,请参考下面的链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。