Python库学习(十二):数据分析Pandas[下篇]

接着上篇《Python库学习(十一):数据分析Pandas[上篇]》,继续学习Pandas

1.数据过滤

在数据处理中,我们经常会对数据进行过滤,为此Pandas中提供mask()where()两个函数;

  • mask(): 在 满足条件的情况下替换数据,而不满足条件的部分则保留原始数据;
  • where(): 在 不满足条件的情况下替换数据,而满足条件的部分则保留原始数据;
from datetime import datetime, timedelta
import random
import pandas as pd

def getDate() -> str:
    """
    用来生成日期
    :return: 
    """

    # 随机减去天数
    tmp = datetime.now() - timedelta(days=random.randint(1100))
    # 格式化时间
    return tmp.strftime("%Y-%m-%d")

if __name__ == '__main__':
    # 准备数据 水果
    fruits = ["苹果""香蕉""橘子""榴莲""葡萄"]
    rows = 3
    today = datetime.now()
    data_dict = {
        "fruit": [random.choice(fruits) for _ in range(rows)],
        "date": [getDate() for _ in range(rows)],
        "price": [round(random.uniform(15), 2for _ in range(rows)],  # 随机生成售价,并保留两位小数
    }
    data = pd.DataFrame(data_dict)
    # 复制数据,方便后续演示
    data_tmp = data.copy()
    print("-------------- 生成数据预览 ------------------")
    print(data)
    print("-------------- 普通条件:列出价格大于3.0的水果 ------------------")
    condition = data["price"] > 3.0
    # 列出价格大于3.0的水果
    fruit_res = data[condition]["fruit"]
    print("价格大于3.0的水果:", fruit_res.to_numpy())

    print("-------------- 使用mask:把价格大于3.0设置成0元 ------------------")
    # 把价格大于3.0设置成0元
    data["price"] = data["price"].mask(data["price"] > 3.0, other=0)
    print(data)
    print("-------------- 使用where:把价格不大于3.0设置成0元 ------------------")
    # 把价格不大于3.0设置成0元
    data_tmp["price"] = data_tmp["price"].where(data_tmp["price"] > 3.0, other=0)
    print(data_tmp)
    
"""
-------------- 生成数据预览 ------------------
  fruit        date  price
0    橘子  2023-10-16   3.52
1    苹果  2023-09-08   1.07
2    葡萄  2023-09-27   2.69
-------------- 普通条件:列出价格大于3.0的水果 ------------------
价格大于3.0的水果: ['橘子']
-------------- 使用mask:把价格大于3.0设置成0元 ------------------
  fruit        date  price
0    橘子  2023-10-16   0.00
1    苹果  2023-09-08   1.07
2    葡萄  2023-09-27   2.69
-------------- 使用where:把价格不大于3.0设置成0元 ------------------
  fruit        date  price
0    橘子  2023-10-16   3.52
1    苹果  2023-09-08   0.00
2    葡萄  2023-09-27   0.00
"""
    

@注:从功能上可以看出,mask()和where()是正好两个相反的函数

2. 数据遍历

if __name__ == '__main__':
    # 数据生成参考上面
    print("-------------- 生成数据预览 ------------------")
    print(data)
    print("-------------- 遍历dataframe数据 ------------------")
    for index, row in data.iterrows():
        print("index:{} 水果:{} 日期:{} 售价:{}".format(index, row["fruit"], row["date"], row["price"]))

    print("-------------- 遍历Series数据 ------------------")
    series_data = pd.Series({"name""张三""age"20"height"185})
    for k, v in series_data.items():
        print("key:{} value:{}".format(k, v))

"""
-------------- 生成数据预览 ------------------
  fruit        date  price
0    橘子  2023-10-14   3.71
1    橘子  2023-10-03   3.74
2    香蕉  2023-09-06   1.17
3    葡萄  2023-08-30   1.16
4    榴莲  2023-10-21   1.47
-------------- 遍历dataframe数据 ------------------
index:0 水果:橘子 日期:2023-10-14 售价:3.71
index:1 水果:橘子 日期:2023-10-03 售价:3.74
index:2 水果:香蕉 日期:2023-09-06 售价:1.17
index:3 水果:葡萄 日期:2023-08-30 售价:1.16
index:4 水果:榴莲 日期:2023-10-21 售价:1.47
-------------- 遍历Series数据 ------------------
key:name value:张三
key:age value:20
key:height value:185
"""
        

3. 分层索引

分层索引(MultiIndex)是Pandas 中一种允许在一个轴上拥有多个(两个或更多)级别的索引方式。这种索引方式适用于多维数据和具有多个层次结构的数据。

3.1 使用set_index

from datetime import datetime, timedelta
import random
import pandas as pd

if __name__ == '__main__':
    # 创建一个示例 DataFrame
    fruits = ["苹果""苹果""橘子""橘子""橘子""百香果"]
    rows = len(fruits)
    today = datetime.now()
    dict_var = {
        'fruit': fruits,
        'date': [(today - timedelta(days=i)).strftime("%Y-%m-%d"for i in range(rows)],
        'price': [round(random.uniform(15), 2for _ in range(rows)],
        'num': [round(random.uniform(10500), 2for _ in range(rows)]
    }
    sale_data = pd.DataFrame(dict_var)

    # 设置多层次索引
    sale_data.set_index(['fruit''date'], inplace=True)
    print("----------------------------- 创建多层次索引-----------------------------------")
    print(sale_data)
    print("----------------------------- 打印索引信息-----------------------------------")
    index_info = sale_data.index
    print(index_info)
    print("----------------------------- 使用loc 访问多层次索引-----------------------------------")
    search_price = sale_data.loc[('苹果''2023-11-02'), 'price']
    print(search_price)
    print("----------------------------- 使用xs 访问多层次索引-----------------------------------")
    search_xs = sale_data.xs(key=('苹果''2023-11-02'), level=['fruit''date'])
    print(search_xs)
    

"""
----------------------------- 创建多层次索引-----------------------------------
                    price     num
fruit    date                     
苹果    2023-11-02   1.08  211.31
        2023-11-01   1.35  308.87
橘子    2023-10-31   3.25  180.84
        2023-10-30   2.53  115.14
        2023-10-29   2.61  146.49
百香果   2023-10-28   1.36  246.01
----------------------------- 打印索引信息-----------------------------------
MultiIndex([( '苹果', '2023-11-02'),
            ( '苹果', '2023-11-01'),
            ( '橘子', '2023-10-31'),
            ( '橘子', '2023-10-30'),
            ( '橘子', '2023-10-29'),
            ('百香果', '2023-10-28')],
           names=['fruit', 'date'])
----------------------------- 使用loc 访问多层次索引-----------------------------------
1.08
----------------------------- 使用xs 访问多层次索引-----------------------------------
                  price     num
fruit date                     
苹果    2023-11-02   1.08  211.31
"""
    

3.2 使用**MultiIndex**

if __name__ == '__main__':
    fruits = ["苹果""香蕉""橘子""榴莲""葡萄""雪花梨""百香果"]
    date_list = ['2023-03-11''2023-03-13''2023-03-15']
    cols = pd.MultiIndex.from_product([date_list, ["售卖价""成交量"]], names=["日期""水果"])
    list_var = []
    for i in range(len(fruits)):
        tmp = [
            round(random.uniform(15), 2), round(random.uniform(1100), 2),
            round(random.uniform(15), 2), round(random.uniform(1100), 2),
            round(random.uniform(15), 2), round(random.uniform(1100), 2),
        ]
        list_var.append(tmp)
    print("--------------------------------创建多层次索引--------------------------------")
    multi_data = pd.DataFrame(list_var, index=fruits, columns=cols)
    print(multi_data)
    print("--------------------------------打印多层次索引--------------------------------")
    print(multi_data.index)
    print(multi_data.columns)
    # 搜行
    print("----------------------------- 使用filter-- 行搜索-----------------------------------")
    print(multi_data.filter(like='苹果', axis=0))    
    print("----------------------------- 使用filter-- 列搜索-----------------------------------")
    # 搜列
    print(multi_data.filter(like='2023-03-11', axis=1))
    
"""
--------------------------------创建多层次索引--------------------------------
日期  2023-03-11        2023-03-13        2023-03-15       
水果         售卖价    成交量        售卖价    成交量        售卖价    成交量
苹果        2.54  69.40       3.27  18.89       1.93   3.37
香蕉        1.99  53.33       1.88  92.77       3.64  26.60
橘子        2.48  27.81       3.20   8.71       2.58  85.44
榴莲        3.15  47.89       1.09  93.15       2.51  85.30
葡萄        4.59  35.58       4.88  77.02       3.08  64.96
雪花梨       3.17   9.58       4.48  44.17       4.15  88.94
百香果       3.05   7.65       3.51  82.03       3.97  52.06
--------------------------------打印多层次索引--------------------------------
Index(['苹果', '香蕉', '橘子', '榴莲', '葡萄', '雪花梨', '百香果'], dtype='object')
MultiIndex([('2023-03-11', '售卖价'),
            ('2023-03-11', '成交量'),
            ('2023-03-13', '售卖价'),
            ('2023-03-13', '成交量'),
            ('2023-03-15', '售卖价'),
            ('2023-03-15', '成交量')],
           names=['日期', '水果'])
----------------------------- 使用filter-- 行搜索-----------------------------------
日期 2023-03-11       2023-03-13        2023-03-15      
水果        售卖价   成交量        售卖价    成交量        售卖价   成交量
苹果       2.54  69.4       3.27  18.89       1.93  3.37
----------------------------- 使用filter-- 列搜索-----------------------------------
日期  2023-03-11       
水果         售卖价    成交量
苹果        2.54  69.40
香蕉        1.99  53.33
橘子        2.48  27.81
榴莲        3.15  47.89
葡萄        4.59  35.58
雪花梨       3.17   9.58
百香果       3.05   7.65
"""
    

4. 数据读写

4.1 写入表格

from datetime import datetime, timedelta
import random
import pandas as pd

if __name__ == '__main__':
    fruits = ["苹果""香蕉""橘子""榴莲""葡萄""雪花梨""百香果"]
    rows = 20
    today = datetime.now()
    print(today.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
    dict_var = {
        '水果': [random.choice(fruits) for _ in range(rows)],
        '进价': [round(random.uniform(15), 4for _ in range(rows)],
        '售价': [round(random.uniform(15), 4for _ in range(rows)],
        '日期': [(today - timedelta(days=i)).strftime("%Y-%m-%d"for i in range(rows)],
        '销量': [round(random.uniform(10500), 4for _ in range(rows)]
    }
    sale_data = pd.DataFrame(dict_var)
    print(sale_data)
    # 保存,浮点数保留两位小数
    sale_data.to_excel("./test.xlsx", float_format="%.2f")

a.主要参数说明:

  • excel_writer: Excel 文件名或 ExcelWriter 对象。如果是文件名,将创建一个 ExcelWriter 对象,并在退出时自动关闭文件。
  • sheet_name: 字符串,工作表的名称,默认为 Sheet1
  • na_rep: 用于表示缺失值的字符串,默认为空字符串。
  • float_format: 用于设置浮点数列的数据格式。默认为 None,表示使用 Excel 默认的格式,当设置 %.2f表示保留两位。
  • columns: 要写入的列的列表,默认为 None。如果设置为 None,将写入所有列;如果指定列名列表,将只写入指定的列。
  • header: 是否包含列名,默认为 True。如果设置为 False,将不写入列名。
  • index: 是否包含行索引,默认为 True。如果设置为 False,将不写入行索引。
  • index_label: 用于指定行索引列的名称。默认为 None
  • startrow: 数据写入的起始行,默认为 0
  • startcol: 数据写入的起始列,默认为 0
  • freeze_panes: 值是一个元组,用于指定要冻结的行和列的位置。例如, (2, 3) 表示冻结第 2 行和第 3 列。默认为 None,表示不冻结任何行或列。

4.2 读取表格

import pandas as pd

if __name__ == '__main__':
    # ------------------------------ 读取表格 ----------------------------------
    print("----------------------------- 读取全部数据 -----------------------")
    # 读取全部数据
    read_all_data = pd.read_excel("./test.xlsx")
    print(read_all_data)
    print("----------------------------- 只读取第1、2列数据 -----------------------")
    # 只读取第1、2列数据
    read_column_data = pd.read_excel("./test.xlsx", usecols=[12])
    print(read_column_data)
    print("----------------------------- 只读取列名为:日期、销量 的数据 -----------------------")
    # 读取
    read_column_data2 = pd.read_excel("./test.xlsx", usecols=['日期''销量'])
    print(read_column_data2)

"""
----------------------------- 读取全部数据 -----------------------
   Unnamed: 0   水果    进价    售价          日期      销量
0           0   榴莲  3.74  2.35  2023-11-03  217.03
1           1  百香果  2.08  3.64  2023-11-02  311.40
2           2  百香果  2.17  4.94  2023-11-01  404.55
3           3   橘子  2.41  2.71  2023-10-31  431.20
4           4   葡萄  2.78  3.99  2023-10-30  323.01
5           5   苹果  4.79  1.68  2023-10-29  161.26
6           6  百香果  1.61  2.78  2023-10-28  407.27
7           7   榴莲  1.56  4.08  2023-10-27   44.74
8           8  雪花梨  1.60  3.02  2023-10-26  119.13
9           9   葡萄  3.03  1.08  2023-10-25  152.87
----------------------------- 只读取第1、2列数据 -----------------------
    水果    进价
0   榴莲  3.74
1  百香果  2.08
2  百香果  2.17
3   橘子  2.41
4   葡萄  2.78
5   苹果  4.79
6  百香果  1.61
7   榴莲  1.56
8  雪花梨  1.60
9   葡萄  3.03
----------------------------- 只读取列名为:日期、销量 的数据 -----------------------
           日期      销量
0  2023-11-03  217.03
1  2023-11-02  311.40
2  2023-11-01  404.55
3  2023-10-31  431.20
4  2023-10-30  323.01
5  2023-10-29  161.26
6  2023-10-28  407.27
7  2023-10-27   44.74
8  2023-10-26  119.13
9  2023-10-25  152.87
"""
    

主要参数说明:

  • io: 文件路径、 ExcelWriter 对象或者类似文件对象的路径/对象。
  • sheet_name: 表示要读取的工作表的名称或索引。默认为 0,表示读取第一个工作表。
  • header: 用作列名的行的行号。默认为 0,表示使用第一行作为列名。
  • names: 覆盖 header 的结果,即指定列名。
  • index_col: 用作行索引的列的列号或列名。
  • usecols: 要读取的列的列表,可以是列名或列的索引。

4.3 更多方法

除了上面的表格读取,还有更多类型的读取方式,方法简单整理如下:

图来自
图来自

5.数据可视化

Pandas底层对Matplotlib进行了封装,所以可以直接使用Matplotlib的绘图方法;

5.1 折线图

from datetime import datetime, timedelta
import random
import pandas as pd
from matplotlib import pyplot as plt

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # ------------------------------ 生成数据 ----------------------------------
    rows = 30
    beginDate = datetime(2023410)
    print("beginDate:", beginDate.strftime("%Y-%m-%d"))
    dict_var = {
        '日期': [(beginDate + timedelta(days=i)).strftime("%Y-%m-%d"for i in range(rows)],
        '进价': [round(random.uniform(14), 2for _ in range(rows)],
        '售价': [round(random.uniform(26), 2for _ in range(rows)],
    }
    apple_data = pd.DataFrame(dict_var)
    apple_data.plot(x='日期', y=['进价''售价'], title='苹果销售数据')
    plt.show()
alt

5.2 散点图

from datetime import datetime, timedelta
import random

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # ------------------------------ 生成数据 ----------------------------------
    rows = 30
    beginDate = datetime(202341)
    print("beginDate:", beginDate.strftime("%Y-%m-%d"))
    dict_var = {
        '日期': [(beginDate + timedelta(days=i)).strftime("%d"for i in range(rows)],
        '进价': [round(random.uniform(14), 2for _ in range(rows)],
        '售价': [round(random.uniform(210), 2for _ in range(rows)],
        '销量': [round(random.uniform(10500), 4for _ in range(rows)]
    }
    apple_data = pd.DataFrame(dict_var)
    # 设置颜色
    colorList = 10 * np.random.rand(rows)
    # 设置
    apple_data.plot(x='日期', y='售价', kind='scatter', title='苹果销售数据', color=colorList, s=dict_var['销量'])
    plt.show()
alt
  • color:表示的是颜色,可以使用字符串表示颜色名称,也可以使用十六进制颜色码。
  • s: 散点图特有的属性,表示散点大小。

5.3 柱形图

import random

import pandas as pd
from matplotlib import pyplot as plt

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # ------------------------------ 生成数据 ----------------------------------
    fruits = ["苹果""香蕉""橘子""榴莲""葡萄""雪花梨""百香果"]
    rows = 7
    beginDate = datetime(202341)
    print("beginDate:", beginDate.strftime("%Y-%m-%d"))
    dict_var = {
        '水果': ["苹果""香蕉""橘子""榴莲""葡萄""雪花梨""百香果"],
        '销量': [round(random.uniform(101000), 2for _ in range(rows)]
    }
    apple_data = pd.DataFrame(dict_var)
    apple_data.plot(x='水果', y='销量', kind='bar', title='水果销售数据')
    plt.show()
alt

本文由 mdnice 多平台发布

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

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

相关文章

leetcode-经典面/笔试题目

1.消失的数字 面试题 17.04. 消失的数字 - 力扣(LeetCode)https://leetcode.cn/problems/missing-number-lcci/ 这个题目当然有好几种解法,这里我推荐一种比较优秀的思路,也就是单身狗思路:异或。 异或的特点是相异…

账户权限控制

1.首先配置一个单群组4节点的链 1.1创建操作目录 cd ~ && mkdir -p fisco && cd fisco 1.2下载国内脚本 curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.9.1/build_chain.sh && chmod ux bu…

【KVM】软件虚拟化和硬件虚拟化类型

前言 大家好,我是秋意零。 今天介绍的内容是虚拟化技术以及软件虚拟化和硬件虚拟化。 👿 简介 🏠 个人主页: 秋意零🔥 账号:全平台同名, 秋意零 账号创作者、 云社区 创建者🧑 个…

系统提示缺少或找不到d3dcompiler_43.dll文件的详细修复教程

今天我来给大家分享一下关于d3dcompiler_43.dll缺失的4个修复方法。 首先,我们来了解一下d3dcompiler_43.dll的作用。它是DirectX中的一个组件,用于编译Shader和Pixel着色器代码。如果缺少了这个文件,就会导致游戏或应用程序无法正常运行。 …

全能数据分析软件 Tableau Desktop 2019 mac中文版功能亮点

Tableau Desktop 2019 mac是一款专业的全能数据分析工具,可以让用户将海量数据导入并记性汇总,并且支持多种数据类型,比如像是编程常用的键值对、哈希MAP、JSON类型数据等,因此用户可以将很多常用数据库文件直接导入Tableau Deskt…

适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

文章目录 内容简介读者对象专家推荐目录赠书活动 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几个突出的问题: 线下CTF比赛培训中存在…

力扣:149. 直线上最多的点数(Python3)

题目: 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全球极客挚爱…

stm32整理(三)ADC

1 ADC简介 1.1 ADC 简介 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部 源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续 采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位…

农业中的机器学习

机器学习训练模型推荐: UnrealSynth虚幻合成数据生成器 - NSDT 机器学习是一个不断发展的领域,在农业中有许多潜在的应用。农民和农业科学家正在探索如何转向机器学习开发来提高作物产量、减少用水量和预测病虫害。未来,机器学习可以帮助农民…

Proteus仿真--12864LCD显示计算器键盘按键实验(仿真文件+程序)

本文主要介绍基于51单片机的12864LCD液晶显示电话拨号键盘按键实验(完整仿真源文件及代码见文末链接) 仿真图如下 本设计主要介绍计算器键盘仿真,按键按下后在12864液晶上显示对应按键键值 仿真运行视频 Proteus仿真--12864LCD显示计算器…

设计模式_访问者模式

访问者模式 介绍 设计模式定义案例问题堆积在哪里访问模式访问模式是行为型设计模式 从对象中分类出算法 这些算法封装为对象, 这样这些算法类很容易扩展,添加新的算法类就可以了不同的VIP用户 在不同的节日 领取不同的礼物if else太多 解决办法小技巧…

[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav

文章归档:https://www.yuque.com/u27599042/coding_star/oglrqteg8fzvvzn0 [自定义 Vue 组件] 响应式顶部导航栏(1.0) TopNav:https://www.yuque.com/u27599042/coding_star/hzltsltxgavwx8u2 组件效果示例 组件所依赖的子组件 [自定义 Vue 组件] 小尾巴…

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出

1. 课程概述(297.1) 课程要求:C语言熟练,提前学完 C51 2. 开发软件Keil5的安装(298.2) 开发环境的安装 编程语言:C语言需要安装的软件有两个:Keil5 和 STM32CubeMX Keil5 的安装…

android display 杂谈(三)WMS

用来记录学习wms,后续会一点一点更新。。。。。。 代码:android14 WMS是在SystemServer进程中启动的 在SystemServer中的main方法中,调用run方法。 private void run() { // Initialize native services.初始化服务,加载andro…

[SSD综述 1.4] SSD固态硬盘的架构和功能导论

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< ​ 前言 机械硬盘的存储系统由于内部结构, 其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大。以Nand Flash为存储介质的固态硬盘技术的发展,…

什么是缓冲区溢出?

缓冲区溢出 1. 什么是缓冲区溢出2. 缓冲区溢出攻击的类型3. 攻击者如何利用缓冲区溢出4. 如何防止缓冲区溢出攻击 1. 什么是缓冲区溢出 &#xff08;1&#xff09;缓冲区 缓冲区是一块连续的计算机内存区域&#xff0c;用于在将数据从一个位置移到另一位置时临时存储数据。这…

2023-2024 中国科学引文数据库来源期刊列表(CSCD)

文章目录 CSCD来源期刊遴选报告2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09; CSCD来源期刊遴选报告 2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09;

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友&#xff0c;现在我们即将要进入数据结构与算法&#xff08;Java版&#xff09;这一系列教程中的排序算法这一章节内容的学习中了&#xff0c;所以还请大家系好安全带&#xff0c;跟随我准备出发吧&#xff01; 相信诸位应该都知道排序算法有很多种吧&#xff01;就算没…

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备?

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 这里以win10系统为例进行说明: 如下图所示,打开右下角的“网络和Internet设置”, 如下图所示,点击进入“更改适配器选项”, 如下图所示…

Leetcode—110.平衡二叉树【简单】

2023每日刷题&#xff08;十九&#xff09; Leetcode—110.平衡二叉树 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int preFunc(struct TreeNode* root) {if(root…