python - DataFrame查询数据操作

news2024/11/17 23:36:01

学习目标

  • 掌握获取df一列或多列数据的方法

  • 知道loc和iloc的区别以及使用方法

  • 知道df的query函数的使用方法

  • 知道isin函数的作用和使用方法

获取DataFrame子集的基本方法

1.1 从前从后获取多行数据

案例中用到的数据集在文章顶部   LJdata.csv

前景回顾 head() & tail()

import pandas as pd
​
# 加载csv数据集
df = pd.read_csv('LJdata.csv')
# 默认取前5行数据, 返回新的DataFrame
print(df.head())
# 取前10行数据
print(df.head(n=10))
​
# 默认取后5行数据, 返回新的DataFrame
print(df.tail())
# 取后10行数据
print(df.tail(n=10))

1.2 获取一列或多列数据

1.2.1 获取一列数据

获取一列数据, 通过df[列名]df.列名, 返回series对象

==注意:==如果列名字中间有空格, 只能通过df['列名']方式获取

print(df['户型'])
print(df.户型)
print(type(df['户型']))  # <class 'pandas.core.series.Series'>
1.2.2 获取多列数据

获取多列数据, 通过 df[[列名1, 列名2, ...]], 返回dataframe对象

==注意:==是两层[], 可以理解为df[列名的列表]

new_df = df[['区域', '地址']]
print(new_df)
print(type(new_df))  # <class 'pandas.core.frame.DataFrame'>

1.3 布尔值向量获取行数据

  • 布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为

    • 布尔值构成的列表

    • 布尔值构成的series

    • 布尔值构成的numpy.ndarray

  • df[[布尔值向量]] 其中布尔值向量的布尔值个数必须和df的行数(df.shape[0])相等

1.3.1 布尔值列表获取对应为True的行数据
df_head = df.head()
print(df_head)
print(df_head[[False, True, False, False, True]])
​
# 输出结果如下
         区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30
         区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
1.3.2 布尔值构成的Series获取对应为True的行数据
print(df_head['面积'] > 80)  # 返回布尔值构成的series对象
print(df_head[temp_df['面积'] > 80])
​
# 输出结果如下
0    False
1    False
2     True
3     True
4    False
Name: 面积, dtype: bool
         区域          地址    户型  面积  价格  朝向    更新时间  看房人数
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
1.3.3 布尔值构成的ndarray获取对应为True的行数据
import numpy as np
n1 = np.array([False, True, False, False, True])
print(n1)
print(df_head[n1])
​
# 输出结果如下
[False  True False False  True]
         区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

1.4 索引下标切片获取行数据

通过 df[起始行下标:结束行下标:步长], 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

temp_df = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
print(temp_df[0:3]) # 取前3行
print(temp_df[:5:2]) # 取前5行,步长为2
print(temp_df[1::3]) # 取第2行到最后所有行,步长为3
print(temp_df[-3:])  # 获取最后三行
​
# 输出结果如下
         区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34
         区域        地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房      新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房    远见名苑  2室1厅    86  8000   东  2017.07.20        34
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
         区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
7    马甸租房      月季园  2室1厅    53  6000   南  2017.07.16        26

loc通过行列名获取子集

df.loc[] 通过行名(行索引值、行索引名)、列名获取子集

2.1 行索引值获取1行数据

通过 df.loc[行索引值] 获取一行数据

# 获取行索引值为2的一行数据, 返回series
print(temp_df.loc[2]) 
​
# 输出结果如下
区域        广安门租房
地址          远见名苑
户型            2室1厅
面积                86
价格              8000
朝向                东
更新时间    2017.07.20
看房人数            34
Name: 2, dtype: object

2.2 行索引值获取多行数据

通过 df.loc[[行索引值1, 行索引值2, ...]] 获取多行数据

# 获取行索引值为0和2的两行数据, 返回dataframe
print(temp_df.loc[[0, 2]])
​
# 输出结果如下
         区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.3 行索引值切片获取多行数据

通过 df.loc[起始行索引值:结束行索引值:步长] 获取多行数据

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

==注意:==df.loc[起始行索引值:结束行索引值:步长] 不等同于 df[起始行下标:结束行下标:步长]

print(temp_df.loc[:3])  # 表示获取行索引值0到3的行数据
print(temp_df[:3])  # 表示获取行下标值0到2的行数据
​
# 输出结果如下
         区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
         区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.4 布尔值向量获取行数据

通过 df.loc[[布尔值向量]] 获取对应为True的行数据, 等同于 df[[布尔值向量]]

df_head = df.head()
n1 = np.array([False, True, False, False, True])
print(df_head.loc[n1])
​
# 输出结果如下
         区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

2.5 布尔值向量取行再配合列名取子集

通过 df.loc[布尔值向量, [列名1, 列名2, ...]] 获取子集

# print(temp_df['区域'] == '望京租房')  # 返回布尔值的series
​
# loc 有两个参数,参数1是布尔条件,参数2是选择查询的列
print(temp_df.loc[temp_df['区域'] == '望京租房', ['区域', '价格']])
​
# 输出结果如下
       区域  价格
1  望京租房  7800

2.6 行索引值取行再配合列名取子集

通过 df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]

print(temp_df.loc[[1], ['区域', '价格']])
​
# 输出结果如下
       区域  价格
1  望京租房  7800
​
​
print(df.loc[4,'地址'])  # 得到的是字符串
​
# 输出结果如下
  团结湖北口  

2.7 行索引值切片取行再配合列名取子集

通过 df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]] 获取子集

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

print(temp_df.loc[1:5:2, ['区域', '价格']])
print(temp_df.loc[:, ['区域', '价格']])
​
# 输出结果如下
         区域  价格
1    望京租房  7800
3  天通苑租房  5300
5  回龙观租房  4000
         区域  价格
0    燕莎租房  5800
1    望京租房  7800
2  广安门租房  8000
3  天通苑租房  5300
4  团结湖租房  6400
5  回龙观租房  4000
6    北苑租房  7500
7    马甸租房  6000
8  小西天租房  8500
9    北苑租房  5300

3 iloc通过行列下标获取子集

df.iloc[] 通过行下标(行索引下标、行序号)、列下标获取子集

3.1 行下标获取1行数据

通过 df.iloc[行下标] 获取一行数据

# 获取行索引下标为2的一行数据, 返回series
dict_data= {
    '歌手':['周杰伦','张国荣','罗大佑'],
    '歌曲':['七里香','沉默是金','童年']
}
df_star = pd.DataFrame(data=dict_data,index=[2004,1991,1982],columns=['歌手','歌曲'])
print(df_star)
​
print(df_star.iloc[0])  # 行索引是: 2004 1991 1982   # 行下标是 : 0 1 2 
​
# 输出结果
歌手    周杰伦
歌曲    七里香
Name: 2004, dtype: object

3.2 行下标获取多行数据

通过 df.iloc[[行下标1, 行下标2, ...]] 获取多行数据

# 获取行索引下标为0和2的两行数据, 返回dataframe
print(df_star.iloc[[0, 2]])
​
# 输出结果如下
       歌手   歌曲
2004  周杰伦  七里香
1982  罗大佑   童年

3.3 行下标切片获取多行数据

通过 df.iloc[起始行下标:结束行下标:步长] 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

==注意:==df.iloc[起始行下标:结束行下标:步长] 等同于 df[起始行下标:结束行下标:步长]

print(temp_df.iloc[:3])  # 表示获取行下标为0到2的行数据
print(temp_df[:3])  # 表示获取行下标为0到2的行数据
​
# 输出结果如下
         区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34
         区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

3.4 行列下标切片取子集

通过 df.iloc[起始行下标:结束行下标:步长, 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始行/列, 不包含结束行/列), 步长默认为1

# 第1行到第5行,每2行选第1行;所有列,每2列取第1列
print(temp_df.iloc[0:5:2, ::2])
​
# 输出结果如下
         区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

3.5 行下标切片和列下标取子集

通过 df.iloc[起始行下标:结束行下标:步长, [列下标1, 列下标2, ...]] 获取子集

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

# 第1行到第5行,每2行选第1行;第1列和第3列
print(temp_df.iloc[0:5:2, [0, 2]])
​
# 输出结果如下
         区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.6 行下标和列下标取子集

通过 df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]

# 第1行、第3行、第5行;第1列和第3列
print(temp_df.iloc[[0, 2, 4], [0, 2]])
​
# 输出结果如下
         区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.7 行下标和列下标切片取子集

通过 df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始列, 不包含结束列), 步长默认为1

# 第1行、第3行、第5行;所有列,每2列取第1列
print(temp_df.iloc[[0, 2, 4], ::2])
​
# 输出结果如下
         区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

4 query函数获取子集

通过 df.query(判断表达式) 获取符合条件的df子集, 与 df[[布尔值向量]] 效果相同

==注意:==判断表达式为字符串格式

  • 示例

    print(temp_df.query("区域=='望京租房'"))  #  区域是列名  ,望京租房是值
    print(temp_df[temp_df['区域'] == '望京租房'])
    ​
    # 输出结果如下
           区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1  望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33

  • 查询租房区域为望京、天通苑、回龙观并且朝向为东、南的房源数据

    ​
    # .query().query()是链式编程, 第一个query查询之后,第二个query会在第一个的基础上再进行查询
    ​
    print(temp_df.query('区域 in ["望京租房", "天通苑租房", "回龙观租房"]').query('朝向 in ["东", "南"]'))
    ​
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) and (朝向 in ["东", "南"])'))
    ​
    # 作用同上
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) & (朝向 in ["东", "南"])'))
    ​
    ​
    # 输出结果如下
             区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
    5  回龙观租房    龙华园  1室1厅    58  4000   南  2017.07.23        61

5 isin函数获取子集

通过 df.isin(values=[值1, 值2, ...]) 判断df中的数据值是否在values列表值中, 返回由布尔值构成的新df

原df中数据值在values列表中返回True, 否则返回False

temp_df = df.head(5)
# 拿到temp_df每行每列的值去和'天通苑租房'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房']))
​
# 拿到temp_df每行每列的值去和'天通苑租房'或者'南'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房', '南']))
​
print(temp_df[temp_df.isin(values=['天通苑租房', '南'])])
​
print(temp_df[((temp_df["区域"]=='望京租房') | (temp_df['区域']=='天通苑租房') | (temp_df['区域']=='回龙观租房')) & ((temp_df['朝向']=='东') | (temp_df['朝向']=='南'))])
​
​
​
# 输出结果如下
    区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False  False     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False  False     False     False
    区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False   True     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False   True     False     False
         区域 地址 户型  面积  价格 朝向 更新时间  看房人数
0         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN
1         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
2         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
3  天通苑租房  NaN  NaN   NaN   NaN  NaN      NaN       NaN
4         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN

Serires对象使用isin函数返回新的s对象,其他完全相同

print(temp_df['区域'].isin(values=['天通苑租房']))
print(temp_df['区域'].isin(values=['天通苑租房', '回龙观租房']))
print(temp_df[temp_df['区域'].isin(values=['天通苑租房', '回龙观租房'])])
​
​
# 输出结果如下
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool
                 区域          地址    户型  面积  价格  朝向    更新时间  看房人数
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30

总结

请对下列API 有印象、能找到、能理解、能看懂

  • API清单

子集操作方法方法说明
df.head(n)获取前n行数据,默认5行
df.tail(n)获取最后n行数据,默认5行
df[列名] 或 df.列名获取一列数据
df[[列名1,列名2,...]]获取多列数据
df[[布尔值向量]]df[[True, False, ...]]取出对应为True的数据行
df[起始行下标:结束行下标:步长]行下标(索引下标)切片获取数据行
df.loc[行索引值]索引值(行名)获取1行数据
df.loc[[行索引值1, 行索引值2, ...]]索引值(行名)获取多行数据
df.loc[起始行索引值:结束行索引值:步长]索引值(行名)切片获取多行数据,注意与df[起始行下标:结束行下标:步长]不同
df.loc[[布尔值向量]]布尔值向量获取行数据,等同于df[[布尔值向量]]
df.loc[布尔值向量,[列名1, 列名2, ...]]布尔值向量取行再配合列名取子集
df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]索引值取行再配合列名取子集
df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]]列名取子集
df.iloc[行下标]行下标取1行
df.iloc[[行下标1, 行下标2, ...]]行下标取多行
df.iloc[起始行下标:结束行下标:步长]行下标切片取多行
df.iloc[起始行下标:结束行下标:步长,起始列下标:结束列下标:步长]行列下标切片取子集
df.iloc[起始行下标:结束行下标:步长,[列下标1, 列下标2, ...]]行下标切片和列下标取子集
df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]行下标和列下标取子集
df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长]行下标和列下标切片取子集
df.query('判断表达式字符串')df[[布尔值向量]]效果相同依据判断表达式返回符合条件的df子集
df.isin([值1, 值2, ...])判断是否存在某个值
  • loc和iloc的区别:

    • loc是根据行列名获取子集,行列名是肉眼看到的值

    • iloc是根据行列下标获取子集,行列下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别

首先介绍下函数&#xff0c;函数块与数据块这三个概念。 数据块 数据块里可以存储各种类型的参数。有人可能会问&#xff0c;m寄存器不是可以存储布尔值&#xff0c;8位&#xff0c;16位&#xff0c;32位变量吗&#xff0c;为什么要多此一举&#xff1f;因为虽然m寄存器能存储以…

超详细的java Comparable,Comparator接口解析

前言 Hello大家好呀&#xff0c;在java中我们常常涉及到对象的比较&#xff0c;不同于基本数据类型&#xff0c;对于我们的自定义对象&#xff0c;需要我们自己去建立比较标准&#xff0c;例如我们自定义一个People类&#xff0c;这个类有name和age两个属性&#xff0c;那么问…

QT creator c动态链接库的创建与调用

QT creator c动态链接库的创建与调用 QT5.15.2 1.创建dll项目 确保两类型选择正确 2.选择MinGW 64-bit 3.点击完成 pro文件参考&#xff1a; QT - guiTEMPLATE lib DEFINES QT_DLL_DEMO_LIBRARYCONFIG c17# You can make your code fail to compile if it uses deprecat…

计算机组成结构—IO系统概述

目录 一、I/O 系统的发展 1. 早期阶段 2. 接口模块和 DMA 阶段 3. 通道结构阶段 4. 处理机阶段 二、I/O 系统的组成 1. I/O 软件 2. I/O 硬件 三、I/O 设备 1. I/O 设备分类 2. I/O 设备的组成 在计算机中&#xff0c;除 CPU 和主存两大模块之外&#xff0c;第三个重…

Vue项目安装axios报错npm error code ERESOLVE npm error ERESOLVE could not resolve解决方法

在Vue项目中安装axios时报错 解决方法&#xff1a;在npm命令后面加--legacy-peer-deps 例如&#xff1a;npm install axios --save --legacy-peer-deps 因为别的需求我把node版本重装到了最新版&#xff08;不知道是不是这个原因&#xff09;&#xff0c;后来在项目中安装axi…

STM32作业实现(四)光敏传感器

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

【Python爬虫单点登录实战】PyExecJS破解慧职教:过河源技术学院单点登录统一身份认证

目录 前言大致分析PyExecJS 使用案例pip 安装:Demo:输出:案例1.访问目标网站的登录页面并查看源码2.将js放到和py脚本同一级目录下3. 编写Python脚本来调用js破解单点登录实战提取密钥参数清洗数据登陆测试单点登录获取ticket获取jsessionid获取token成功我的专栏前言 博主提供…

Python 知识图谱补全,Knowledge Graph Completion,基于大模型的知识图谱补全,基于LLMs的KGC任务

今天讲一篇文章《Exploring Large Language Models for Knowledge Graph Completion》 &#xff0c;这篇文章主题&#xff1a;基于大模型做知识图谱补全 1.文章主要思想&#xff1a; 本章描述知识图谱补全中的三个任务&#xff1a;三元组分类、关系预测和实体(链接)预测&…

微信如何防止被对方拉黑删除?一招教你解决!文末附软件!

你一定不知道&#xff0c;微信可以防止被对方拉黑删除&#xff0c;秒变无敌。只需一招就能解决&#xff01;赶快来学&#xff01;文末有惊喜&#xff01; 惹到某些重要人物&#xff08;比如女朋友&#xff09;&#xff0c;被删除拉黑一条龙&#xff0c;那真的是太令人沮丧了&a…

Ubuntu server 24 (Linux) AdGuard Home +SmartDNS 安装配置 搭建去广告快速DNS

一 SmartDNS 安装 &#xff0c;可参考&#xff1a;Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器-CSDN博客 二 安装AdGuard 1 下载地址&#xff1a;GitHub - AdguardTeam/AdGuardHome: Network-wide ads & trackers blocking DNS server 2 解压安装 #下…

路由器重启真的好吗?多久重启一次更好?

前言 小白前段时间发现自己家的OpenWRT软路由上网特别慢&#xff0c;有时候通话还有点卡顿。 然而有个朋友用的普通路由器也有类似的问题&#xff0c;而且有时候根本上不去网。 解决的办法很简单&#xff1a;重启路由器。 重启路由器&#xff1f; 但路由器重启是真的好吗&a…

链表反转--理解链表指针的基本操作

链表反转--理解链表指针的基本操作 链表反转的方法--主要是理解链表指针链表心得类节点是对象和指针区别&#xff1a; 链表反转的方法–主要是理解链表指针 根据值创建新列表 用一个链表指针代替整个新链表 两个链表的赋值 递归求解反向链表 用一个链表代替前后链表数…

将div渲染成textarea框,类似于ant design 的TextArea

一 先看效果 原始效果 输入时效果 二 代码如下 1. html 代码 <div className{style.divTextArea} contentEditable"true"></div> 2. Css(Less)代码 .divTextArea {width: 90%;margin-top: 10px;line-height: 28px;min-height: 60px;border: 1px solid …

优雅谈大模型10:MoE

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

牛客java基础(一)

A 解析 : java源程序只允许一个public类存在 &#xff0c;且与文件名同名 ; D hashCode方法本质就是一个哈希函数&#xff0c;这是Object类的作者说明的。Object类的作者在注释的最后一段的括号中写道&#xff1a;将对象的地址值映射为integer类型的哈希值。但hashCode()并不…

使用python绘制桑基图

使用python绘制桑基图 桑基图效果代码 桑基图 桑基图&#xff08;Sankey Diagram&#xff09;是一种用来表示流动&#xff08;如能源、资金、材料等&#xff09;在不同实体之间转移的图表。 每个流的宽度与流量成正比&#xff0c;通常用于显示能量或成本流动的分布情况。 桑基…

【TB作品】MSP430F149单片机,广告牌,滚动显示

LCD1602滚动显示切换播放暂停字符串 显示Public Places 显示No Smoking 播放 暂停 部分代码 char zifu1[] "Public Places "; char zifu2[] "Class Now "; char zifu3[] "No admittance "; char *zifu[] { zifu1, zifu2, zifu3 }…

初识C++ · 模板进阶

目录 前言&#xff1a; 1 非类型模板参数 2 按需实例化 3 模板特化 4 模板的分离编译 前言&#xff1a; 前面模板我们会了简单的使用&#xff0c;这里带来模板的进阶&#xff0c;当然&#xff0c;也就那么几个知识点&#xff0c;并不太难。 1 非类型模板参数 先来看这样…

C语言过度C++语法补充(面向对象之前语法)

目录 1. C相较于C语言新增的语法 0. C 中的输入输出 1. 命名空间 1. 我们如何定义一个命名空间&#xff1f; 2. 如何使用一个命名空间 3. 命名空间中可以定义什么&#xff1f; 4. 在 相同或者不同 的文件中如果出现 同名的命名空间 会如何&#xff1f; 5. 总结~~撒花~~…

大模型基础——从零实现一个Transformer(1)

一、Transformer模型架构图 主要模块&#xff1a; embedding层&#xff1a; Input/Output Embedding&#xff1a; 将每个标记(token)转换为对应的向量表示。 Positional Encoding&#xff1a;由于没有时序信息&#xff0c;需要额外加入位置编码。 N个 block堆叠: Multi-Head …