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
'''
posted @ 2023-08-07 08:36  cnblogs用户  阅读(33)  评论(0编辑  收藏  举报