Python_Pandas入门

一、什么是Pandas?

博文转载: https://www.runoob.com/pandas/pandas-tutorial.html

基于NumPy的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。

Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

Pandas 应用

Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

数据结构

Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

二、Pandas 安装

安装 pandas 需要基础环境是 Python,开始前我们假定你已经安装了 Python 和 Pip。

使用 pip 安装 pandas:

undefined

python;gutter:true; pip install pandas</p> <pre><code> 安装成功后,我们就可以导入 pandas 包使用: </code></pre> <pre><code> </code></pre> <p>import pandas as pd 实例 - 查看 pandas 版本 pd.<strong>version</strong> # 查看版本</p> <h1>一个简单的 pandas 实例:</h1> <p>mydataset={ '第一列':['蔬菜','琴台','早上'], '第二列':['肉禽','笔墨','篝火'] } myvar = pd.DataFrame(mydataset) print(myvar)</p> <pre><code> </code></pre> <pre><code> 三、Pandas 数据结构 - Series Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。 Series 由索引(index)和列组成,函数如下: </code></pre> <p>pandas.Series( data, index, dtype, name, copy)参数说明:data:一组数据(ndarray 类型)。index:数据索引标签,如果不指定,默认从 0 开始。dtype:数据类型,默认会自己判断。name:设置名称。copy:拷贝数据,默认为 False。</p> <pre><code> </code></pre> <p>sites = {1: "Google", 2: "Runoob", 3: "Wiki"} myvar = pd.Series(sites, index = [1, 2])#如果没有指定索引,索引值就从 0 开始: print(myvar) print(myvar[1]) 我们可以指定索引值,如下实例: ar = ['a','b','c'] myvar = pd.Series(ar,index=['x','y','z']) print(myvar) 根据索引值读取数据: print(myvar['y'])</p> <pre><code> 我们也可以使用 key/value 对象,类似字典来创建 Series: 实例: </code></pre> <p>import pandas as pd</p> <p>sites = {1: "Google", 2: "Runoob", 3: "Wiki"}</p> <p>myvar = pd.Series(sites)</p> <p>print(myvar)</p> <pre><code> ![Python_Pandas入门](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2788061-20220501194505699-1435141139.png) 设置 Series 名称参数: </code></pre> <p>import pandas as pd</p> <p>sites = {1: "Google", 2: "Runoob", 3: "Wiki"}</p> <p>myvar = pd.Series(sites, index = [1, 2], name="RUNOOB-Series-TEST" )</p> <p>print(myvar)</p> <pre><code> ![Python_Pandas入门](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2788061-20220501194552266-465343665.png) 四、Pandas 数据结构 - DataFrame DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。 ![](https://www.runoob.com/wp-content/uploads/2021/04/pandas-DataStructure.png) ![](https://www.runoob.com/wp-content/uploads/2021/04/df-dp.png) DataFrame 构造方法如下: </code></pre> <p>pandas.DataFrame( data, index, columns, dtype, copy)</p> <pre><code> 参数说明: * **data**:一组数据(ndarray、series, map, lists, dict 等类型)。 * **index**:索引值,或者可以称为行标签。 * **columns**:列标签,默认为 RangeIndex (0, 1, 2, ..., n) 。 * **dtype**:数据类型。 * **copy**:拷贝数据,默认为 False。 Pandas DataFrame 是一个二维的数组结构,类似二维数组。 ### 实例 - 使用列表创建 </code></pre> <p>import pandas as pd</p> <p>data = [['Google',10],['Runoob',12],['Wiki',13]]</p> <p>df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)</p> <p>print(df)</p> <pre><code> 以下实例使用 ndarrays 创建,ndarray 的长度必须相同, 如果传递了 index,则索引的长度应等于数组的长度。如果没有传递索引,则默认情况下,索引将是range(n),其中n是数组长度。 ### 实例 - 使用 ndarrays 创建 </code></pre> <p>import pandas as pd</p> <p>data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}</p> <p>df = pd.DataFrame(data)</p> <p>print (df)</p> <pre><code> ![Python_Pandas入门](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2788061-20220501195116399-375719175.png) 从以上输出结果可以知道, DataFrame 数据类型一个表格,包含 rows(行) 和 columns(列): ![](https://www.runoob.com/wp-content/uploads/2021/04/rows-cloumns.png) 还可以使用字典(key/value),其中字典的 key 为列名: ### 实例 - 使用字典创建 </code></pre> <p>import pandas as pd</p> <p>data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]</p> <p>df = pd.DataFrame(data)</p> <p>print (df)</p> <pre><code> 输出结果为: </code></pre> <p>a b c 0 1 2 NaN 1 5 10 20.0</p> <pre><code> 没有对应的部分数据为 **NaN**。 Pandas 可以使用 loc 属性返回指定行的数据,如果没有设置索引,第一行索引为 0,第二行索引为 1, 以此类推: </code></pre> <p>data = { "calories": [420, 380, 390], "duration": [50, 40, 45] } 数据载入到 DataFrame 对象 df = pd.DataFrame(data) 返回第一行 print(df) print(df.loc[0]) ''' #返回结果其实就是一个 Pandas Series 数据。 calories 420 duration 50 Name: 0, dtype: int64 '''</p> <pre><code> </code></pre> <h1>返回第一行和第二行#返回多行数据,使用 [[ ... ]] 格式,... 为各行的索引,以逗号隔开:</h1> <pre><code> </code></pre> <p>print(df.loc[[0,1]])''' 返回结果其实就是一个 Pandas DataFrame 数据。 calories duration0 420 501 380 40'''</p> <pre><code> </code></pre> <p>data = { "calories": [420, 380, 390], "duration": [50, 40, 45] } df = pd.DataFrame(data, index = ["day1", "day2", "day3"]) print(df) ''' calories duration day1 420 50 day2 380 40 day3 390 45 ''' Pandas 可以使用 loc 属性返回指定索引对应到某一行: 指定索引 print(df.loc["day2"]) ''' calories 380 duration 40 Name: day2, dtype: int64 '''</p> <pre><code> ### 只拿mango这一列的数据 </code></pre> <p>data = { "mango": [420, 380, 390], "apple": [50, 40, 45], "pear": [1, 2, 3], "banana": [23, 45,56] } df = pd.DataFrame(data) print(df[['mango']]) #只拿mango这一列的数据 假设我们只关注 apple列 和 banana列 的数据时,可以使用以下方法: print(df) print(df[["apple","banana"]])</p> <pre><code> 五、Pandas CSV 文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。 Pandas 可以很方便的处理 CSV 文件,本文以 [nba.csv](https://static.runoob.com/download/nba.csv) 为例 </code></pre> <p>dt = pd.read_csv('./nba.csv')</p> <h1>to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 ... 代替。</h1> <p>print(dt.to_string()) print(dt)</p> <p>print(dt.loc[1]) #获取第一行数据 print(dt[['Name']]) # 获取Name列的数据</p> <pre><code> ### #我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件: </code></pre> <h1>定义三个字段的数据</h1> <p>name = ['zs','ls','ww'] age = [18,19,20] gender = ['男','男','男']</p> <h1>定义字典</h1> <p>dt = {'names':name,'ages':age,'genders':gender}</p> <h1>转化为dataframe结构</h1> <p>dt = pd.DataFrame(dt) print(dt)</p> <h1>保存为csv文件 默认生成位置为当前项目 可写绝对路径改变生成位置</h1> <p>dt.to_csv('test.csv') dt.to_csv('C:/test.csv')</p> <pre><code> ### 数据处理 head() head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。下标0开始 df = pd.read_csv('nba.csv ') print(df.head(10)) ### tail() tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。 </code></pre> <p>print(df.tail(10))</p> <pre><code> ### info() info() 方法返回表格的一些基本信息: ### df = pd.read_csv('nba.csv ')print(df.info()) ### df = pd.read_csv('nba.csv ')print(df.info()) </code></pre> <p>'''RangeIndex: 458 entries, 0 to 457 # 行数,458 行,第一行编号为 0Data columns (total 9 columns): # 列数,9列 # Column Non-Null Count Dtype # 各列的数据类型--- ------ -------------- ----- 0 Name 457 non-null object 1 Team 457 non-null object 2 Number 457 non-null float64 3 Position 457 non-null object 4 Age 457 non-null float64 5 Height 457 non-null object 6 Weight 457 non-null float64 7 College 373 non-null object # non-null,意思为非空的数据 8 Salary 446 non-null float64dtypes: float64(4), object(5) # 类型'''#non-null 为非空数据,我们可以看到上面的信息中,总共 458 行,College 字段的空值最多。</p> <pre><code> 六、Pandas JSON JSON( **J**ava **S**cript **O**bject **N**otation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。 JSON 比 XML 更小、更快,更易解析, Pandas 可以很方便的处理 JSON 数据,本文以 [sites.json](https://static.runoob.com/download/sites.json) 为例,内容如下: </code></pre> <p>import pandas as pd</p> <p>df = pd.read_json('sites.json') print(df.to_string())</p> <h1>to_string() 用于返回 DataFrame 类型的数据,我们也可以直接处理 JSON 字符串。</h1> <p>df = pd.DataFrame(df) print(df)</p> <pre><code> 以上实例输出结果为: </code></pre> <p>id name url likes 0 A001 菜鸟教程 www.runoob.com 61 1 A002 Google www.google.com 124 2 A003 淘宝 www.taobao.com 45</p> <pre><code> JSON 对象与 Python 字典具有相同的格式,所以我们可以直接将 Python 字典转化为 DataFrame 数据: ### 实例 </code></pre> <p>定义字典 s = { "col1":{"row1":1,"row2":2,"row3":3}, "col2":{"row1":"x","row2":"y","row3":"z"} }</p> <p>读取 JSON 转为 DataFrame df = pd.DataFrame(s) print(df)</p> <h1>从 URL 中读取 JSON 数据:</h1> <p>URL = 'https://static.runoob.com/download/sites.json' df = pd.read_json(URL) print(df)</p> <pre><code> ### 内嵌的 JSON 数据 假设有一组内嵌的 JSON 数据文件 sites2 df = pd.read_json('sites2.json ') print(df) </code></pre> <p>以上实例输出结果为:</p> <pre><code> school_name class students </code></pre> <p>0 ABC primary school Year 1 {'id': 'A001', 'name': 'Tom', 'math': 60, 'phy...</p> <p>1 ABC primary school Year 1 {'id': 'A002', 'name': 'James', 'math': 89, 'p...</p> <p>2 ABC primary school Year 1 {'id': 'A003', 'name': 'Jenny', 'math': 79, 'p...</p> <p>这时我们就需要使用到 json_normalize() 方法将内嵌的数据完整的解析出来:</p> <pre><code> </code></pre> <p>import json with open('sites2.json','r') as f: print('aaa') data = json.loads(f.read())</p> <h1>data = json.loads(f.read()) 使用 Python JSON 模块载入数据。</h1> <h1>json_normalize() 使用了参数 record_path 并设置为 ['students'] 用于展开内嵌的 JSON 数据 students。</h1> <p>df = pd.json_normalize(data,record_path=['students']) print(df)</p> <pre><code> 七、Pandas 数据清洗 数据清洗是对一些没有用的数据进行处理的过程。 很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。 在这个教程中,我们将利用 Pandas包来进行数据清洗。 本文使用到的测试数据 数据清洗.csv : ## Pandas 清洗空值 如果我们要删除包含空字段的行,可以使用 **dropna()** 方法,语法格式如下: </code></pre> <h1>我们可以通过 isnull() 判断各个单元格是否为空。</h1> <p>df = pd.read_csv('./数据清洗.csv') print(df['NUM_BEDROOMS']) print(df['NUM_BEDROOMS'].isnull())</p> <pre><code> ### DataFrame .dropna (axis =0 ,how ='any',thresh =None ,subset =None ,inplace =False ) **参数说明:** * axis:默认为 **0**,表示逢空值剔除整行,如果设置参数 **axis=1** 表示逢空值去掉整列。 * how:默认为 **'any'** 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 **how='all'** 一行(或列)都是 NA 才去掉这整行。 * thresh:设置需要多少非空值的数据才可以保留下来的。 * subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。 * inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。 ##### 以上例子中我们看到 Pandas 把 n/a 和 NA 当作空数据,na 不是空数据,不符合我们要求,我们可以指定空数据类型: </code></pre> <p>missing_values= ['n/a','na','--'] df = pd.read_csv('./数据清洗.csv',na_values=missing_values) print (df['NUM_BEDROOMS']) print (df['NUM_BEDROOMS'].isnull())</p> <pre><code> #### #接下来的实例演示了删除包含空数据的行 </code></pre> <p>df = pd.read_csv('./数据清洗.csv') df = df.dropna() print(df.to_string())</p> <pre><code> #### #注意:默认情况下,dropna() 方法返回一个新的 DataFrame,不会修改源数据。 #如果你要修改源数据 DataFrame, 可以使用 inplace = True 参数: </code></pre> <p>df = pd.read_csv('./数据清洗.csv') df.dropna(inplace = True) print(df.to_string())</p> <pre><code> #### #我们也可以移除指定列有空值的行: #移除 ST_NUM 列中字段值为空的行: </code></pre> <p>df = pd.read_csv('./数据清洗.csv') df.dropna(subset=['ST_NUM'], inplace = True) print(df.to_string())</p> <pre><code> #### 我们也可以 fillna() 方法来替换一些空字段: </code></pre> <p>df = pd.read_csv('./数据清洗.csv') df=df['PID'].fillna(11) #使用 12345 替换 PID 为空数据 df =df.fillna(12345) #使用 12345 替换全表为空数据 print(df.to_string())</p> <pre><code> #### #替换空单元格的常用方法是计算列的均值、中位数值或众数。 #Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。 </code></pre> <h1>使用 mean() 方法计算列的均值并替换空单元格:</h1> <p>df = pd.read_csv('./数据清洗.csv') x = df["ST_NUM"].mean() df["ST_NUM"].fillna(x, inplace = True) print(df.to_string())</p> <h1>使用 median() 方法计算列的中位数并替换空单元格:</h1> <p>df = pd.read_csv('./数据清洗.csv') x = df["ST_NUM"].median() df["ST_NUM"].fillna(x, inplace = True) print(df.to_string())</p> <h1>使用 mode() 方法计算列的众数并替换空单元格:</h1> <p>df = pd.read_csv('./数据清洗.csv') x=df['NUM_BATH'].mode() print('---',x) #--- 0 1 默认输出x 为 0 1 print("-----",int(x)) # ----- 1 强转 dt = df['ST_NUM'].fillna(float(x)) # 强转 print(dt.to_string())</p> <pre><code> ## Pandas 清洗格式错误数据 数据格式错误的单元格会使数据分析变得困难,甚至不可能。 我们可以通过包含空单元格的行,或者将列中的所有单元格转换为相同格式的数据。 以下实例会格式化日期: </code></pre> <p>第三个日期格式错误 data = { "Date": ['2020/12/01', '2020/12/02' , '20201226'], "duration": [50, 40, 45] } df = pd.DataFrame(data, index = ["day1", "day2", "day3"]) df['Date'] = pd.to_datetime(df['Date']) print(df.to_string())</p> <pre><code> 以上实例输出结果如下: </code></pre> <p>name age 0 Google 50 1 Runoob 40 2 Taobao 30</p> <pre><code> 也可以设置条件语句: ### 实例 将 age 大于 120 的设置为 120: </code></pre> <p>import pandas as pd</p> <p>person = { "name": ['Google', 'Runoob' , 'Taobao'], "age": [50, 200, 12345] }</p> <p>df = pd.DataFrame(person)</p> <p>for x in df.index: if df.loc[x, "age"] > 120: df.loc[x, "age"] = 120</p> <p>print(df.to_string())</p> <pre><code> 以上实例输出结果如下: </code></pre> <p>name age 0 Google 50 1 Runoob 120 2 Taobao 120</p> <pre><code> 也可以将错误数据的行删除: 将 age 大于 120 的删除: </code></pre> <p>import pandas as pd</p> <p>person = { "name": ['Google', 'Runoob' , 'Taobao'], "age": [50, 40, 12345] # 12345 年龄数据是错误的 }</p> <p>df = pd.DataFrame(person)</p> <p>for x in df.index: if df.loc[x, "age"] > 120: df.drop(x, inplace = True)</p> <p>print(df.to_string())</p> <pre><code> 以上实例输出结果如下: </code></pre> <p>name age 0 Google 50 1 Runoob 40</p> <pre><code> ## Pandas 清洗重复数据 如果我们要清洗重复数据,可以使用 **duplicated()** 和 **drop_duplicates()** 方法。 如果对应的数据是重复的, **duplicated()** 会返回 True,否则返回 False。 </code></pre> <p>import pandas as pd</p> <p>person = { "name": ['Google', 'Runoob', 'Runoob', 'Taobao'], "age": [50, 40, 40, 23] } df = pd.DataFrame(person)</p> <p>print(df.duplicated())</p> <pre><code> 以上实例输出结果如下: </code></pre> <p>0 False 1 False 2 True 3 False dtype: bool</p> <pre><code> 删除重复数据,可以直接使用 **drop_duplicates()** 方法。 </code></pre> <p>import pandas as pd</p> <p>persons = { "name": ['Google', 'Runoob', 'Runoob', 'Taobao'], "age": [50, 40, 40, 23] }</p> <p>df = pd.DataFrame(persons)</p> <p>df.drop_duplicates(inplace = True) print(df)</p> <pre><code> 以上实例输出结果如下: </code></pre> <p>name age 0 Google 50 1 Runoob 40 3 Taobao 23

Original: https://www.cnblogs.com/zzc1102/p/16214207.html
Author: and脱发周大侠
Title: Python_Pandas入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599290/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis-持久化

    因为Redis是内存操作,意味着掉电就GG, 所以为了保证异常重启等问题后能尽快恢复服务,还是需要一定的持久化机制来保证。Redis提供了两种持久化机制: AOF Append O…

    数据库 2023年6月11日
    0103
  • 设计模式之(7)——装饰设计模式

    定义:装饰设计模式允许向一个现有的对象添加功能,而不改变其结构(这就很符合程序设计的” 开闭原则“),重点突出类功能的增强,属于结构型创建模式,这种模式创建…

    数据库 2023年6月14日
    081
  • MySQL实战45讲 15

    15 | 答疑文章(一):日志和索引相关问题 日志相关 binlog(归档日志)和redo log(重做日志)配合崩溃恢复,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎…

    数据库 2023年5月24日
    0106
  • Java项目服务器跨域设置

    引入jar包 cors-filter-2.6 :http://central.maven.org/maven2/com/thetransactioncompany/cors-fil…

    数据库 2023年6月16日
    083
  • linux常用命令(持续更新中…)

    查看所有开机启动服务:systemctl list-unit-files # 按Enter翻页 查看所有开机启动服务:systemctl list-unit-files | gre…

    数据库 2023年6月14日
    080
  • HTTP 协议概述

    什么是 HTTP 协议 什么是协议? 协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的…

    数据库 2023年6月11日
    074
  • 2022-6-2-mysql常用的命令

    mysql -uroot -proot -h192.168.56.10表示使用mysql的客户端进行连接数据库管理系统 -u后面是连接数据库的用户名,一般默认的情况下用户名都是ro…

    数据库 2023年5月24日
    088
  • 携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术

    前段时间我在准备暑期实习嘛,这是当时面携程的时候二面的一道问题,我一脸懵逼,赶紧道歉,不好意思不知道没了解过,面试官又解释说 redo log,我寻思着 redo log 我知道啊…

    数据库 2023年6月6日
    0258
  • City of stars

    本文来自博客园,作者:ukyo–BlackJesus,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/16747306.html Or…

    数据库 2023年6月11日
    0104
  • MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的”精通MYSQL等数据库及优化” 那么我们今天就先来了解一…

    数据库 2023年5月24日
    093
  • 工具 | 常用 PostgreSQL 预防数据丢失方案

    作者:张连壮 PostgreSQL 研发负责人从事多年 PostgreSQL 数据库内核开发,对 Citus 有非常深入的研究。 PostgreSQL 本身不具备数据闪回和数据误删…

    数据库 2023年5月24日
    082
  • Are You OK?主键、聚集索引、辅助索引

    每张表都一定存在主键吗? 关于这个问题,各位小伙伴们不妨先自己想一想,再往下寻找答案。 首先公布结论: 对于 InnoDB 存储引擎来说,每张表都一定有个主键(Primary Ke…

    数据库 2023年6月6日
    080
  • jmeter并发设置的原理

    简介 广义并发 绝对并发 简介 ​ 性能测试过程中是否需要进行同步定时器的设置,需要根据实际情况来考虑。 ​ 举个栗子来讲是我们的双十一秒杀活动,这时候就必须实现请求数量达到一定数…

    数据库 2023年6月6日
    078
  • 常见的位操作及其应用

    概述 与、或、异或、取反或者移位运算这几种基本的位操作想必诸位读者并不陌生,如果我们能在某些合适场景下使用位运算,有些时候可以大大提高算法的效率。但由于本身位运算太过灵活,甚至某些…

    数据库 2023年6月11日
    078
  • JUC学习笔记(一)

    1、什么是 JUC 1.1、JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是 java.util .concurrent 工具包…

    数据库 2023年6月6日
    0100
  • JavaScript进阶内容——DOM详解

    JavaScript进阶内容——DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? …

    数据库 2023年6月14日
    0156
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球