饮冰三年-人工智能-Pandas-77-Pandas 数据查询

上一篇:饮冰三年-人工智能-Pandas-74-初始Pandas

 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备

一、df.loc 方法

 

def get_data_from_db():
    """
    新版本的pandas库中con参数使用sqlalchemy库创建的create_engine对象
    创建create_engine对象(格式类似于URL地址):
    """
    engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8'
                           % (MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, MYSQL_NAME))
    return pd.read_sql("SELECT * FROM tb_score", engine)
获取数据

 

# 查看前5行数据
print(df.head())
"""
输出结果
   id  gender  ...            add_time         modify_time
0   7       0  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
1   8       0  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
2   9       0  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
3  10       1  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
4  11       1  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
"""
查看数据
# 索引默认是数字索引,我么通常可以将主键id设置为索引
df.set_index('id', inplace=True)
print(df.index)

"""
Int64Index([  7,   8,   9,  10,  11,  12,  13,  14,  15,  16,
            ...
            477, 478, 479, 480, 481, 482, 483, 484, 485, 486],
           dtype='int64', name='id', length=480)
"""
查看并设置索引

 

1.1 使用单个label值

print("--------1.1 使用单个label值----------")
df1 = df.loc[33, 'score_total']
print(df1)  # 50
View Code
--------1.1 使用单个label值----------
50
结果

1.2 使用值列表批量查询

print("--------1.2 使用值列表批量查询----------")
df2 = df.loc[[33, 34, 35, 36], 'score_total']
print(df2)
View Code
--------1.2 使用值列表批量查询----------
id
33     50
34    100
35     80
36     90
Name: score_total, dtype: int64
结果

1.3 使用数值区间进行范围查找

print("--------1.3 使用数值区间进行范围查找(注意:左闭右闭)----------")
df3 = df.loc[33:36, 'score_total']
print(df3)
df3_1 = df.loc[33:36, 'student_id':'score_total']
print(df3_1)
View Code
--------1.3 使用数值区间进行范围查找(注意:左闭右闭)----------
id
33     50
34    100
35     80
36     90
Name: score_total, dtype: int64
    student_id student_name  exams_version  exams_date  score_total
id                                                                 
33         203         小花-计              1  2022-02-11           50
34         214         张三-计              1  2022-02-11          100
35         215         李四-计              1  2022-02-11           80
36         216         王五-计              1  2022-02-11           90
结果

1.4 条件表达式查询

print("--------1.4 使用条件表达式查询----------")
df4 = df.loc[df['score_total'] > 90, ["profession_name", "course_name", "student_name", "score_total", ]]
print(df4)
print("--------1.4 使用条件表达式查询(复杂查询)----------")
df4_1 = df.loc[
    (df['score_total'] > 90) & (df["profession_name"] == '计算机'), ["course_name", "student_name", "score_total", ]]
print(df4_1)
View Code
--------1.4 使用条件表达式查询----------
    profession_name course_name student_name  score_total
id                                                       
10            经济与管理        语文-经         张三-经          100
22            经济与管理        英语-经         张三-经          100
28            经济与管理       经济学-经         张三-经          100
34              计算机        语文-计         张三-计          100
46              计算机        英语-计         张三-计          100
52              计算机       计算机-计         张三-计          100
58            文学与历史        语文-文         张三-文          100
70            文学与历史        英语-文         张三-文          100
76            文学与历史       世界史-文         张三-文          100
82              挖掘机        语文-挖         张三-挖          100
94              挖掘机        英语-挖         张三-挖          100
100             挖掘机     挖掘机实操-挖         张三-挖          100
106           经济与管理        语文-经         张三-经          100
118           经济与管理        英语-经         张三-经          100
124           经济与管理       经济学-经         张三-经          100
130             计算机        语文-计         张三-计          100
142             计算机        英语-计         张三-计          100
。。。。。。  
结果

1.5 调用函数查询

print("--------1.5 使用自定义函数查询----------")
df5 = df.loc[query_my_data, ["profession_name", "course_name", "student_name", "score_total", ]]
print(df5)
View Code
--------1.5 使用自定义函数查询----------
    profession_name course_name student_name  score_total
id                                                       
10            经济与管理        语文-经         张三-经          100
34              计算机        语文-计         张三-计          100
58            文学与历史        语文-文         张三-文          100
82              挖掘机        语文-挖         张三-挖          100
106           经济与管理        语文-经         张三-经          100
130             计算机        语文-计         张三-计          100
结果

二、df.iloc 方法

和loc一样,按“行”索引出数据,但loc可以按标签索引,iloc和python中list一样是按照索引值。
一个[]是切片出一维Series。
嵌套的[[]]是切割出DataFrame,其中可以混合切割,
iloc是第一个参数是按行,第二是按列,例如df.iloc[[0, 2], [1, 4]]。找出第1行和第3行 的 第2列和第5列,返回的类型是DataFrame。

2.1 使用单个label值

print("--------2.1 使用单个label值----------")
df1_i = df.iloc[[33], [0]]
print(df1_i)
View Code
"""
含义:选择34行的第2列的值
    gender   
     1
"""
结果

 

2.2 使用值列表批量查询

print("--------2.2 使用值列表批量查询----------")
df2_i = df.iloc[[33, 34, 35, 36], [1]]
print(df2_i)
View Code
"""
    profession_id
id               
40              2
41              2
42              2
43              2
"""
结果

三、df.where 方法

# 三、df.where 方法 如果不符合条件 替换成NaN
print("--------3.1 df.where 查询----------")
dfw_1 = df.where(df["score_total"] == 100)
print(dfw_1)
View Code
"""
     gender  profession_id  ...            add_time         modify_time
id                          ...                                        
7       NaN            NaN  ...                 NaT                 NaT
8       NaN            NaN  ...                 NaT                 NaT
9       NaN            NaN  ...                 NaT                 NaT
10      1.0            1.0  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
"""
结果

四、df.query 方法

 

# 四、df.query 方法 如果不符合条件 直接过滤掉
print("--------4.1 df.query 查询----------")
dfq_1 = df.query("score_total == 100")
print(dfq_1)
View Code

 

"""
     gender  profession_id  ...            add_time         modify_time
id                          ...                                        
10        1              1  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
22        1              1  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
28        1              1  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
34        1              2  ... 2022-02-11 17:16:52 2022-02-11 17:16:54
"""
结果

 下一篇:饮冰三年-人工智能-Pandas-78-Pandas 新增、统计、排序

posted @ 2022-05-28 09:27  逍遥小天狼  阅读(68)  评论(0编辑  收藏  举报