前言:
💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析,本篇文章主要讲述了:数据查询操作,数据增删改操作,索引和列名操作等等。欢迎大家一起探索讨论!!!
💞💞代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!
个人主页⭐: 书生♡
gitee主页🙋♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬
目录
- 1. Pandas数据查询操作
-
- 1.1 基本查询方法
-
- 1.1.1 从前从后查询---head和tail
- 1.1.2 查询一/多列数据--- 对象名[列名]
- 1.1.3 布尔值向量查询多行数据
- 1.1.4 行下标切片查询多行数据---对象名[起始下标值:结束下标值:步长]
- 1.2 loc查询行列数据
- 1.3 iloc查询行列数据
- 1.4 loc和iloc的区别
- 1.5 query方法
- 1.6 where 方法
- 1.7 isin 方法获取子集
- 1.8 方法小结(重点)
- 2. Pandas数据增删改操作
-
- 2.1 增加列
-
- 2.1.1 末尾增加列
- 2.1.2 insert方法指定位置增加列数据
- 2.2 DataFrame删除行列
- 2.3 数据去重
-
- 2.3.1 drop_duplicates()
- 2.3.2 unique 去重
- 2.4 Series 和 DataFrame 修改数据
-
- 2.4.1 直接修改数据
- 2.4.2 replace 替换数据
- 2.4.3 apply调用自定义函数修改
- 2.4.4 applymap方法
- 2.5 小结(重点)
- 3. DataFrame获取索引和列名
-
- 3.1 获取索引和列名
-
- 3.1.1 获取DF对象的索引和列名
- 3.1.2 获取S对象的索引和列名
- 3.2 修改索引和列名
-
- 3.2.1 指定列作为索引
- 3.2.2 重置索引
- 3.2.3 赋值修改
- 3.2.4 rename方法修改索引和列名
- 3.3 小结(重点)
1. Pandas数据查询操作
1.1 基本查询方法
准备数据:从文件中读取数据,使用read_csv方法
# 导入模块
import pandas as pd
import numpy as np
# 加载链家租房数据
df = pd.read_csv('data/LJdata.csv')
1.1.1 从前从后查询—head和tail
- 从前面查询使用-----》
head(n)
- 从后面查询使用-----》
tail(n)
- n是我们查询的行数,默认是5行
# 前3条数据
print(df.head(n=3))
# 后3条数据
df.tail(n=3)
1.1.2 查询一/多列数据— 对象名[列名]
- 获取一列数据
df[列名] / df.列名
-> 列名不能有空格/不能和属性名重名
# 获取一列数据
print(df['id'].head(n=5))
print(df.name.head(n=5))
- 获取多列数据
获取多列数据 select 列名1, 列名2, … from 表名
df[[列名1, 列名2, ...]]
# 获取多列数据
df[['name', 'age']].head(n=3)
1.1.3 布尔值向量查询多行数据
- 通过布尔值向量获取多行数据
# 通过布尔值向量获取多行数据
df_head = df.head()
df_head
- 布尔值s对象获取多行数据
注意:
df[‘age’] == df[‘age’].max()
这个表达式返回一个Series,其中包含布尔值(True 或
False),表示DataFrame中每一行的’age’列是否等于’age’列的最大值。 返回类型:
返回的是一个布尔Series,长度与原始DataFrame相同,每个元素表示对应行的’age’值是否为最大。
df[df[‘age’]==df[‘age’].max()]
描述: 这个表达式使用前面得到的布尔Series作为索引来筛选DataFrame,只保留那些满足条件(即’age’等于最大值)的行。
返回类型: 返回的是一个新的DataFrame,只包含那些’age’列值等于最大值的行。
# 布尔值s对象获取多行数据
print(df['age'] == df['age'].max())
df[df['age']==df['age'].max()]
- 布尔值列表获取多行数据
# 布尔值列表的个数要和df数据的行数一致
# 布尔值列表获取多行数据
list1 = [True, False, True, False, False, False,
True, False, True, False, False, False,
True, False, True, False,False]
df[list1]
- 布尔值数组获取多行数据
# 布尔值数组获取多行数据
n1 = np.array([True, False, True, False, False, False,
True, False, True, False, False, False,
True, False, True, False,False])
df[n1]
1.1.4 行下标切片查询多行数据—对象名[起始下标值:结束下标值:步长]
通过行下标切片获取多行数据, 语法等同于python容器索引切片
行下标从上到下从0开始, 从下到上从-1开始
df[起始下标值:结束下标值:步长]
左闭右开原则
-> 包含起始下标对应的行数据, 不包含结束下标对应的行数据
起始下标为0, 可以省略不写
结束下标不写, 获取最后一行数据
步长不写默认为1, 可以修改; 可以为负数, 倒序查询
数据准备
# 获取准备的数据
df_head = df.head(n=10)
df_head # 取前十条数据
# 查询前五条数据
temp_df = df_head[0:5]
temp1_df = df[:5] # 起始下标值为0可以不写
temp2_df = df[3:] # 结束下标不写, 获取最后一行数据
temp3_df = df[::] # 全部省略,获取全部数据
temp4_df = df[::-1] # 倒序查询全部数据
temp5_df = df[::2] # 步长为2,查看奇数列,即id为1、3、5、7、9
temp6_df = df[::-2] # 步长为-2,查看偶数列,即id为2、4、6、8、10
temp7_df = df[9:6:-1]
temp7_df
1.2 loc查询行列数据
行索引值/列名:肉眼看到的值, 可以是任意值, 可以重复
df.loc[行索引名, 列名]
- 索引/列下标: 从0开始, 或从-1开始 ,是看不见的
- 索引名/列名: 肉眼看到的值, 可以是任意值, 可以有重复的值
- 通过行索引名
# 获取行数据
# df.loc[[行索引名1, 行索引名2, ...]]
# 获取一行数据
print(df.loc[0]) # 返回Series对象
print(df.loc[[0]]) # 返回df对象
df.loc[[0, 1, 2]] # 返回df对象
- 行索引值切片获取多行数据
df.loc[起始索引值:结束索引值:步长]
—左闭右闭
# 行索引值切片获取多行数据
# df.loc[起始索引值:结束索引值:步长]
# 左闭右闭原则
print(df.loc[0:5:1])
# df[0:5:1] # 取到第五行
print(df.loc[2::]) #
print(df.loc[2:8:2]) # 步长为2,查看奇数列,即索引2,4,6,8
print(df.loc[::-1]) # 倒序查询全部数据
print(df.loc[9:6:-1]) # 倒序返回 9-6 的数据
- 布尔值向量获取多行数据
df.loc[布尔值向量]
# 布尔值向量获取多行数据
# df.loc[布尔值向量]
df.loc[df['age']==df['age'].max(), ['name', 'age']]
- 布尔值向