Pandas入门篇(二)-------Dataframe篇5(进阶)(Dataframe的时间序列Dataframe最终篇!!)(机器学习前置技术栈)

news2024/10/6 1:40:09

目录

  • 概述
  • 一、pandas的日期类型
    • (一)datetime64类型的特点
    • (二) 时间序列的创建
      • 1.从字符串创建datetime64类型
      • 2. 整数(Unix时间戳)创建datetime64类型
      • 3.导入数据时直接转换
    • (三)datetime64作为索引
  • 二、运用时间序列索引获取数据
    • 1.选择特定日期的数据
    • 2. 切片选择时间范围
    • 3. between_time(),at_time()
      • between_time()
      • at_time()
  • 三、重采样时间序列数据
    • resample() 函数
    • 1. 常用的时间规则
    • 2.将日数据重采样为月数据
    • 3. resample后面可以接apply函数,传入自定义函数
    • 4. 注意事项:
  • 四、移动窗口操作
    • rolling() 方法
    • 1.在单列上执行滚动操作
    • 2. 在多个列上执行滚动操作
    • 2.对不同列使用不同的聚合函数
    • 3. 应用自定义函数
    • 4. 注意事项:
  • 五、时间差异计算
    • 1. diff()函数
    • 2.diff()函数在时间序列上的使用
  • 六、时间戳转换和格式化
    • 1. 将字符串转换为日期时间对象
    • 2. 格式化日期时间对象
    • 4. 时区转换
    • 5.注意事项:
  • 下篇内容

概述

使用DataFrame处理时间序列数据时,你可以轻松地进行时间戳的转换和格式化。Pandas提供了丰富的函数和方法来处理日期和时间,如pd.to_datetime()用于将字符串转换为日期时间对象,.dt访问器用于访问日期时间的各个部分,以及strftime()方法用于将日期时间对象格式化为字符串。这些功能使得在DataFrame中处理时间序列数据变得简单而直观。

此外,DataFrame还支持基于时间的索引操作,如between_time()和at_time()。这些方法允许你根据特定的时间范围或时间点来筛选数据,从而快速提取出感兴趣的时间段内的数据。这对于时间序列分析、数据可视化以及预测建模等任务非常有用。

总之,DataFrame的时间序列是数据分析中不可或缺的一部分。通过利用Pandas库的功能,你可以轻松地处理、分析和可视化时间序列数据,从而发现数据中的模式和趋势,为决策提供有力支持。

一、pandas的日期类型

Pandas中的日期类型主要是datetime64,这是一个固定宽度的数据类型,用于表示日期和时间。datetime64类型允许存储从1677年到2262年之间的日期和时间,以纳秒为时间单位。

(一)datetime64类型的特点

固定宽度:datetime64类型在内存中占用固定数量的字节,这有助于高效地存储和处理时间序列数据。

纳秒精度:datetime64类型使用纳秒作为时间单位,因此可以表示非常精确的时间戳。

时间范围:如前所述,datetime64可以表示从1677年到2262年之间的日期和时间。

时区感知:Pandas支持时区感知的datetime64类型,这对于处理跨越不同时区的数据非常有用。

(二) 时间序列的创建

你可以使用pd.to_datetime()函数将字符串、整数、浮点数或其他数据类型转换为datetime64类型。这个函数非常灵活,可以处理多种格式的日期和时间字符串。

1.从字符串创建datetime64类型

import pandas as pd  
  
# 从字符串创建datetime64类型  
date_string = '2023-10-23'  
date = pd.to_datetime(date_string)  
print(date)  

运行结果:
在这里插入图片描述

2. 整数(Unix时间戳)创建datetime64类型

# 从整数(Unix时间戳)创建datetime64类型  
timestamp = 1697606400  # 示例:2023-10-23 00:00:00的Unix时间戳  
dt_from_timestamp = pd.to_datetime(timestamp, unit='s')  
print(dt_from_timestamp)

运行结果:
在这里插入图片描述

3.导入数据时直接转换

使用parse_dates参数直接把需要转换的列转化为datetime64

ebola = pd.read_csv('/export/data/pandas_data/country_timeseries.csv', parse_dates=['Date'])
ebola

运行结果:
在这里插入图片描述

(三)datetime64作为索引

将datetime64类型的列设为索引列

# 将Date类设为索引列
ebola.set_index('Date')

运行结果
在这里插入图片描述
获取2014年12月的数据

二、运用时间序列索引获取数据

导入数据:

crime = pd.read_csv('/export/data/pandas_data/crime.csv',parse_dates=['REPORTED_DATE'],index_col='REPORTED_DATE')
crime =crime.sort_index()
crime

运行结果:
在这里插入图片描述

利用时间索引,你可以像处理普通索引一样对数据进行切片。

1.选择特定日期的数据

# 提取2012年1月2日的数据
crime['2012-01-02']

运行结果:
在这里插入图片描述

# 提取2012年1月的数据
crime['2012-01']

运行结果:
在这里插入图片描述

2. 切片选择时间范围

# 提取2012年1月-2月的数据的数据
crime['2012-01':'2012-02'] # 新版已停用
crime.loc['2012-01':'2012-02'] # 标准写法

运行结果:
在这里插入图片描述

注意:
运用时间序列获取数据的时候,先对时间序列排序在切片运行效率会提高很多

3. between_time(),at_time()

between_time() 和 at_time() 是两个用于根据时间筛选DataFrame中特定时间段的便捷方法,它们特别适用于那些索引为日期时间类型(DatetimeIndex)的DataFrame。这两个方法允许你基于时间进行快速筛选,无需复杂的布尔索引或查询。

between_time()

between_time() 方法用于选择指定开始时间和结束时间之间的所有行。

  • 用法:
DataFrame.between_time(start_time, end_time, include_start=True, include_end=True, tz=None)
  • 参数:

    • start_time:字符串,表示开始时间,格式为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • end_time:字符串,表示结束时间,格式同样为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • include_start:布尔值,默认为 True,表示是否包含开始时间。
    • include_end:布尔值,默认为 True,表示是否包含结束时间。
    • tz:时区字符串或 None,用于指定时区。如果DataFrame的索引已经有时区信息,这个参数可以用来覆盖它。
import pandas as pd  
  
# 创建一个示例DataFrame,索引为日期时间  
dates = pd.date_range('2023-01-01', periods=10, freq='H')  # 每小时一个数据点  
data = {'value': range(10)}  
df = pd.DataFrame(data, index=dates)  
  
# 筛选早上8点到9点之间的数据  
between_8_and_9 = df.between_time('8:00', '9:00')  
print(between_8_and_9)

运行结果:
在这里插入图片描述

at_time()

at_time() 方法用于选择指定时间的所有行。

  • 用法:
DataFrame.at_time(time, tz=None)
  • 参数:

    • time:字符串,表示要筛选的时间,格式为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • tz:时区字符串或 None,与 between_time() 中的 tz 参数相同。

仍然使用上面的DataFrame,并且筛选出早上8点的所有行:

# 筛选早上8点的数据  
at_8 = df.at_time('8:00')  
print(at_8)

运行结果:
在这里插入图片描述

这两个方法都返回一个新的DataFrame,其中只包含满足时间条件的行。它们对于处理时间序列数据,特别是那些需要基于特定时间窗口进行筛选的数据集时,非常有用。

三、重采样时间序列数据

resample() 函数

resample()是用于时间序列数据重采样的强大工具。它允许将时间序列数据从一个频率转换为另一个频率,并通过聚合函数(如求和、均值、最大值等)来减少数据的粒度。这个函数通常应用于 Pandas 的 DataFrame 或 Series 对象,这些对象有一个 DatetimeIndex。

1. 常用的时间规则

  • ‘D’ 或 ‘B’:每日频率,‘D’ 包括周末,‘B’ 仅包括工作日(周一至周五)。
  • ‘H’:每小时频率。
  • ‘T’ 或 ‘min’:每分钟频率。
  • ‘S’:每秒频率。
  • ‘M’:月末频率,即每个日历月末。
  • ‘SM’:每月的开始,即每个月的第一天。
  • ‘BM’:每个业务月(工作日)的月末。
  • ‘BMS’:每个业务月(工作日)的开始。
  • ‘Q’:季度末频率,即每个日历季度的末尾。
  • ‘BQ’:每个业务季度的末尾。
  • ‘QS’:每个季度的开始。
  • ‘BQS’:每个业务季度的开始。
  • ‘A’ 或 ‘Y’:年末频率,即每年的最后一个日历日。
  • ‘AS’ 或 ‘YS’:每年的开始。
  • ‘BA’ 或 ‘BY’:每个业务年的末尾。
  • ‘BAS’ 或 ‘BYS’:每个业务年的开始。
  • ‘W-MON’:每周一频率。你可以使用 ‘W-TUE’、‘W-WED’、‘W-THU’、‘W-FRI’、‘W-SAT’ 或 ‘W-SUN’ 来指定每周的任意一天。
  • ‘W’:每周频率,默认从周日开始,但可以通过 offset 参数进行更改。
  • 自定义偏移量:你还可以创建自定义的日期偏移量,例如 pd.offsets.MonthEnd(3) 表示每个月的第三个日历日的末尾。

2.将日数据重采样为月数据

# 求每个月犯罪的总数
crime.resample('M')['IS_CRIME'].sum()

运行结果:
在这里插入图片描述

3. resample后面可以接apply函数,传入自定义函数

# 计数自定义函数
def my_count(x):
    return x.count()
# 求每个季度犯罪的总数
crime.resample('QS')['IS_CRIME'].apply(my_count)

运行结果:
在这里插入图片描述

4. 注意事项:

  • resample() 函数默认不对数据进行任何聚合,它只是改变了数据的索引频率。为了实际进行聚合操作,你需要链式调用一个聚合函数,如 mean(), sum(), max(), min() 等,或者使用 agg() 函数来指定多个聚合操作。
  • 如果你的 DataFrame 有一个非时间戳的索引,你需要首先将其设置为时间戳索引,才能使用 resample() 函数。这可以通过 set_index() 方法来实现,如上面的示例所示。
  • 在使用 resample() 时,确保你的数据已经按时间顺序排序,因为重采样操作依赖于数据的顺序。如果数据未排序,你可以使用 sort_index() 方法先对数据进行排序。

四、移动窗口操作

rolling() 方法

rolling() 方法用于在 DataFrame 或 Series 对象上执行滚动(或窗口)操作。滚动操作允许你对时间序列数据或其他连续数据执行一系列计算,这些计算是在一个固定大小的窗口上进行的,窗口会沿着数据移动。这对于计算诸如滚动平均值、滚动标准差、滚动最大值等统计量非常有用。

1.在单列上执行滚动操作

# 创建一个示例 DataFrame  
data = {  
    'date': pd.date_range(start='2023-01-01', periods=10),  
    'price': [100, 101, 105, 104, 107, 106, 108, 110, 112, 111]  ,
    'price2': [110, 121, 135, 144, 157, 166, 178, 180, 192, 110] 
}  
df = pd.DataFrame(data)  
df.set_index('date', inplace=True)  
  
# 计算五天的滚动平均值  
rolling_mean = df['price'].rolling(window=5).mean()  
  
rolling_mean

在这里插入图片描述

2. 在多个列上执行滚动操作

如果你的 DataFrame 有多个列,并且你想要对多列都执行滚动操作, rolling() 后指定多列。

# 对 DataFrame 中的每一列计算五天的滚动平均值  
rolling_df = df.rolling(window=5)[['price','price2']].mean()  
rolling_df

运行结果:
在这里插入图片描述

2.对不同列使用不同的聚合函数

同分组聚合一样使用agg函数,进行对不同的列进行不同的操作

rolling_df = df.rolling(window=5)[['price','price2']].agg({'price': 'sum', 'price2': 'mean'})  
rolling_df

运行结果:
在这里插入图片描述

3. 应用自定义函数

还可以使用 apply() 方法与 rolling() 结合来应用自定义函数。

# 自定义函数来计算滚动窗口中的值之和的平方  
def custom_func(series):  
    return (series.sum()) ** 2  
  
# 应用自定义函数到滚动窗口  
rolling_custom = df['price'].rolling(window=5).apply(custom_func)  
  
print(rolling_custom)

运行结果:
在这里插入图片描述

4. 注意事项:

  • rolling() 方法默认不会改变原始数据,而是返回一个新的 DataFrame 或 Series 对象,其中包含了滚动操作的结果。
  • window 参数指定了滚动窗口的大小。它必须是一个整数,表示窗口中包含的元素的数量。
  • 滚动操作会忽略窗口大小小于窗口中元素数量的部分,因此在结果的开头,你会看到一些 NaN 值,这些值表示没有足够的数据来计算滚动统计量。
  • 你可以通过链式调用其他方法(如 dropna())来删除这些 NaN 值。

五、时间差异计算

1. diff()函数

方法在 Pandas 中是一个非常实用的函数,用于计算序列中相邻元素之间的差异。这个方法在处理时间序列数据、金融数据以及其他需要计算相邻元素差值的场景中非常有用。

  • diff() 方法的基本格式:
    对于 DataFrame:DataFrame.diff(periods=1, axis=0, fill_value=None)
    对于 Series:Series.diff(periods=1)
  • 参数说明:
    • periods:指定要计算差值的时期数,可以是正数或负数,默认为1。正数表示后一个元素减去前一个元素,负数则表示前一个元素减去后一个元素。
    • axis:对于 DataFrame,此参数指定计算差值的轴向。如果为0或者’index’,则上下移动;如果为1或者’columns’,则左右移动。默认值为0,即沿着行方向(索引)进行计算。
    • fill_value:用于指定缺失值填充值。如果原数据中存在缺失值(NaN),可以用此参数指定的值进行填充,然后再进行差值计算。

2.diff()函数在时间序列上的使用

diff() 函数在 Pandas 中用于计算时间序列数据中相邻观测值之间的差异。对于时间序列数据,这通常意味着计算连续时间点之间值的变化。这种变化可能代表增长率、速度、加速度或其他任何需要测量连续时间点之间变化量的指标。

  • 计算日变化量
    假设你有一个包含每日股票价格的时间序列 DataFrame,你想要计算每日价格变化。
import pandas as pd  
import numpy as np  
  
# 创建一个包含日期和价格的示例 DataFrame  
dates = pd.date_range(start='2023-01-01', periods=5)  
prices = [100, 102, 105, 103, 106]  
df = pd.DataFrame({'date': dates, 'price': prices})  
df.set_index('date', inplace=True)  
  
# 计算每日价格变化  
daily_changes = df['price'].diff()  
  
daily_changes

运行结果:
在这里插入图片描述
输出会显示每日价格与前一天价格的差异。

  • 计算周变化量
    如果你想计算每周的变化量,你可以通过调整 periods 参数来实现。
# 计算每周价格变化(假设数据是每日的,并且每周有7天)  
weekly_changes = df['price'].diff(periods=7)  
  
# 注意:这将只在有足够的数据点来计算7天差异时返回非NaN值  
weekly_changes

在这里插入图片描述

  • 处理缺失值
    如果时间序列中存在缺失值,diff() 函数将在缺失值的位置返回 NaN。你可以使用 fill_value 参数来填充这些缺失值,然后再进行差分计算。
# 假设价格数据中有缺失值  
prices_with_nan = [100, np.nan, 105, 103, 106]  
df_with_nan = pd.DataFrame({'date': dates, 'price': prices_with_nan})  
df_with_nan.set_index('date', inplace=True)  
  
# 使用前一个有效值填充缺失值,并计算差异  
filled_changes = df_with_nan['price'].fillna(method='ffill').diff()  
  
print(filled_changes)

运行结果:
在这里插入图片描述

在这个例子中,fillna(method=‘ffill’) 使用前一个有效值填充了缺失值。然后,diff() 函数计算了填充后序列的差异。

  • 注意事项
    diff() 方法的工作原理可以简单理解为两个步骤:首先,通过 shift() 方法将数据序列进行移动;然后,将移动后的数据与原数据进行相减,得到相邻元素之间的差异。

需要注意的是,diff() 方法返回的是一个与原数据形状相同的新序列,其中包含了相邻元素的差值。由于计算差值时涉及到了元素的移动,因此在结果序列的开头或结尾部分,可能会因为没有足够的相邻元素而导致出现 NaN 值。

六、时间戳转换和格式化

1. 将字符串转换为日期时间对象

使用pd.to_datetime()函数将其转换为Pandas的日期时间对象。

import pandas as pd  
  
# 假设df是一个DataFrame,其中'date_str'列包含日期时间字符串  
df = pd.DataFrame({  
    'date_str': ['2023-01-01 12:00:00', '2023-01-02 14:30:00']  
})  
  
# 将字符串转换为日期时间对象  
df['date_time'] = pd.to_datetime(df['date_str'])  
  
print(df)

运行结果:
在这里插入图片描述

2. 格式化日期时间对象

  • 使用.dt访问器来访问日期时间的各个部分
# 访问日期时间的各个部分  
df['year'] = df['date_time'].dt.year  
df['month'] = df['date_time'].dt.month  
df['day'] = df['date_time'].dt.day  
df['hour'] = df['date_time'].dt.hour  
df['minute'] = df['date_time'].dt.minute  
df['second'] = df['date_time'].dt.second  
df

运行结果:
在这里插入图片描述

  • 使用strftime()方法来格式化日期时间为字符串。
# 格式化日期时间为字符串  
df['formatted_date'] = df['date_time'].dt.strftime('%Y-%m-%d %H:%M:%S')  
df['formatted_date']

运行结果:
在这里插入图片描述

4. 时区转换

如果你的日期时间数据包含时区信息,并且你需要进行时区转换,你可以使用tz_convert()方法。

# 假设你的日期时间数据是UTC时区的  
df['utc_time'] = pd.to_datetime(df['date_str']).dt.tz_localize('UTC')  
  
# 转换为另一个时区,比如纽约时区(America/New_York)  
df['ny_time'] = df['utc_time'].dt.tz_convert('America/New_York')

5.注意事项:

  • 确保你的日期时间字符串格式与pd.to_datetime()函数能够解析的格式相匹配。如果格式不匹配,你可能需要指定format参数来告诉Pandas如何解析日期时间字符串。
  • 在处理时区时,确保你的环境中安装了pytz库,因为Pandas使用pytz来处理时区信息。
  • 当格式化日期时间为字符串时,strftime()方法中的格式字符串应该遵循Python的日期时间格式化规则。

下篇内容

matplotlib入门

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

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

相关文章

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

笨蛋学C++之 C++连接数据库

笨蛋学C 之 VS2019使用C连接数据库 创建数据库SQL语句VS2019选择空项目&#xff0c;点击下一步创建输入项目名称&#xff0c;点击创建创建成功点击新建项创建源文件因为mysql是64位&#xff0c;此时的c项目是86位&#xff0c;所以这里需要将项目修改为x64位点击项目 -> 0501…

linux 单机安装consul

sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo && sudo yum -y install consul#添加consul配置文件 nano /etc/consul.d/server.json {"server": true,"boots…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

使用 uni-app 开发 iOS 应用的操作步骤

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;上一期和大家一起探讨了使用uniapp开发iOS应用的优势及劣势之后有许多小伙伴想要尝试使用uniapp开发iOS应用&#xff0c;但是却不懂如何使用uniapp开发iOS应用&#xff0c;所以这一期淼淼就来给你们分享…

nginx--平滑升级

失败了&#xff0c;等我拍好错继续更新 命令 选项说明 帮助: -? -h 使用指定的配置文件: -c 指定配置指令:-g 指定运行目录:-p 测试配置文件是否有语法错误:-t -T 打印nginx的版本信息、编译信息等:-v -V 发送信号: -s 示例: nginx -s reload 信号说明 立刻停止服务:stop,相…

【C++】学习笔记——string_3

文章目录 六、string类5. string类的操作6. string类的转换7. string类的模拟实现 未完待续 搭配文档食用 六、string类 5. string类的操作 上面的函数中&#xff0c;有些是不常用的&#xff0c;咱们只挑几个重要的进行讲解。 c_str 就是将字符串转换成 C语言 字符串的格式。…

[Java EE] 多线程(六):线程池与定时器

1. 线程池 1.1 什么是线程池 我们前面提到,线程的创建要比进程开销小,但是如果线程的创建/销毁比较频繁,开销也会比较大.所以我们便引入了线程池,线程池的作用就是提前把线程都创建好,放到用户态代码中写的数据结构中,后面就可以随用随取. 线程池最大的好处就是减少每次启动,…

Python中动画显示与gif生成

1. 动画生成 主要使用的是 matplotlib.animation &#xff0c;具体示例如下&#xff1a; import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np fig, ax plt.subplots() t np.linspace(0, 3, 40) g -9.81 v0 12 z g * t**2 / …

【Python函数和类6/6】类与对象

目录 目标 类与对象 类的定义 栗子 实例化对象 属性和方法的调用 特殊的self参数 类方法的其它参数 函数与方法的区别 总结 目标 在前面的博客当中&#xff0c;我们已经接触了一部分封装。比如&#xff1a;将数据扔进列表中&#xff0c;这就是一个简单…

短视频素材去哪里搬运?短视频素材有哪些类型?

在这个数字化和视觉传达至关重要的时代&#xff0c;选择合适的视频素材对于提升视频内容的吸引力和观众参与度至关重要。无论您是一名广告制片人、社交媒体经理还是独立视频制作者&#xff0c;以下这些精选的视频素材网站将为您提供从高清视频到特效资源的全面支持&#xff0c;…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式&#xff0c;但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式&#xff0c;旨在通过使用一个工厂类来创建对象&#xff0c;而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护&#xff0c;因为新的对…

reactjs后台管理系统搭建

1 通过yarn 模板创建reactjs项目 yarn create vite reactjs-antdesign-admin --template react-ts 2 基础路由测试 定义一个router/index.tsx&#xff0c;里面定义路由组件 const Router: React.FC () > {return (<HashRouter><Switch><Route path"…

Edge浏览器使用心得与深度探索

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

信息时代的智慧导航:高效搜索、信息筛选与信任构建的全面指南!

文章目录 一、高效搜索&#xff1a;快速定位目标信息的秘诀二、信息筛选&#xff1a;去伪存真&#xff0c;找到有价值的信息三、信任构建&#xff1a;深入了解与直接沟通《搜索之道&#xff1a;信息素养与终身学习的新引擎》亮点内容简介目录获取方式 随着科技的飞速发展&#…

前端基础学习html(2)

目录 表格标签&#xff1a; 列表标签&#xff1a; 表格标签&#xff1a; <!-- 表格基本架构 --><!-- tr表示一行&#xff0c;td表示一行内单元格 --><!--th为第一行表头加粗居中显示 --><table border"1"><thead><tr><th&g…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…

【linux学习指南】linux指令与实践文件编写

文章目录 &#x1f4dd;前言&#x1f320; linux目录结构&#x1f309;linux命令介绍 &#x1f320;pwd命令&#x1f309;mkdir指令&#xff08;重要&#xff09; &#x1f320;cd 指令&#x1f309;touch指令 &#x1f320;rmdir指令 && rm 指令&#xff08;重要&…

nginx--配置文件

组成 主配置文件&#xff1a;nginx.conf 子配置文件&#xff1a;include conf.d/*.conf 协议相关的配置文件&#xff1a;fastcgi uwsgi scgi等 mime.types&#xff1a;⽀持的mime类型&#xff0c;MIME(Multipurpose Internet Mail Extensions)多用途互联⽹网邮件扩展类型&…

KUKA机器人KR3 R540维护保养——涂润滑脂

KUKA机器人在保养时少不了润滑脂&#xff0c;不同型号的机器人需要的润滑脂类型也不一样&#xff0c;保养时注意选用合适的润滑脂。本篇文章以KUKA机器人KR3 R540为例&#xff0c;在轴盖板 A2、A3、A5 的内侧涂上润滑脂。 一、涂润滑脂的作用 拆开机器人一个轴的盖板&am…