pandas之query
数据准备
import pandas as pd
product_info = {
"订单号": ["2951110000099262111", "2181910000909928191", "2194560000121355545", "1194560000121311126", "1483160000121315483"],
"数量": [92, 61, 66, 33, 15],
"价格(USD)": [230, 122, 150, 190, 200],
"状态": ['Not Delivered', 'Not Delivered', 'Not Delivered', 'Not Shipped', 'Not Delivered'],
'订单日期': ['2022-02-12', '2022-03-02', '2022-01-22', '2022-02-22', '2022-02-15'],
'订单编号': ['444111', '444122', '444132', '444003', '444244']
}
df = pd.DataFrame(product_info)
print(df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2951110000099262111 92 230 Not Delivered 2022-02-12 444111
1 2181910000909928191 61 122 Not Delivered 2022-03-02 444122
2 2194560000121355545 66 150 Not Delivered 2022-01-22 444132
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
4 1483160000121315483 15 200 Not Delivered 2022-02-15 444244
'''
方法介绍
运算符:
==
,!=
,>
,<
,≥
,≤
,and(&)
,or(|)
,not
单条件查询
# 提取数量为92的所有行
query_df = df.query("数量 == 92")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2951110000099262111 92 230 Not Delivered 2022-02-12 444111
'''
多条件查询
# 查询数量为92 且 单位价格为230的所有行
query_df = df.query("数量 == 92 and `价格(USD)` == 230")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2951110000099262111 92 230 Not Delivered 2022-02-12 444111
'''
# 查询数量为92 或 单位价格为200的所有行
query_df = df.query("数量 == 92 or `价格(USD)` == 200")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2951110000099262111 92 230 Not Delivered 2022-02-12 444111
4 1483160000121315483 15 200 Not Delivered 2022-02-15 444244
'''
反向查询
# 数量不等于92的所有行
query_df = df.query("not(数量 == 92)")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
1 2181910000909928191 61 122 Not Delivered 2022-03-02 444122
2 2194560000121355545 66 150 Not Delivered 2022-01-22 444132
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
4 1483160000121315483 15 200 Not Delivered 2022-02-15 444244
'''
按文本查询
# 获取状态为Not Shipped的所有记录
query_df = df.query("状态 == 'Not Shipped'")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
'''
# 获取订单号开头为21的行
query_df = df.query("订单号.str.startswith('21')")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2181910000909928191 61 122 Not Delivered 2022-03-02 444122
1 2194560000121355545 66 150 Not Delivered 2022-01-22 444132
'''
按日期查询
# 在示例数据中,订单日期列是字符串日期,所以我们需要先进行转换
df["订单日期"] = pd.to_datetime(df["订单日期"], format="%Y-%m-%d")
# 获得2月份的所有记录
query_df = df.query("订单日期.dt.month == 2")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
0 2951110000099262111 92 230 Not Delivered 2022-02-12 444111
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
4 1483160000121315483 15 200 Not Delivered 2022-02-15 444244
'''
# 获取2022年2月订购日为15或以上的所有订单,query_df1 等价于query_df2
query_df1 = df.query("订单日期.dt.month==2 and 订单日期.dt.year==2022 and 订单日期.dt.day>=15")
print(query_df1)
query_df2 = df.query("订单日期>='2022-02-15' and 订单日期<='2022-02-28'")
print(query_df2)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
4 1483160000121315483 15 200 Not Delivered 2022-02-15 444244
'''
使用变量
status = 'Not Shipped'
query_df = df.query("状态 == @status")
print(query_df)
'''
订单号 数量 价格(USD) 状态 订单日期 订单编号
3 1194560000121311126 33 190 Not Shipped 2022-02-22 444003
'''
本文来自博客园,仅供参考学习,如有不当之处还望不吝赐教,不胜感激!转载请注明原文链接:https://www.cnblogs.com/rong-z/p/17606581.html
作者:cnblogs用户