week01

本文通过几个实际案例介绍了Python的基础用法,包括用户登录验证、单位换算、计算三角形的周长与面积以及简单的随机游戏。这些例子覆盖了条件判断、数学计算及随机数生成等常用功能。
# 进入登录系统:
username=input("请输入你的名字:")
password=input("请输入你的密码:")
if username=="admin" and password=="123456":
    print("欢迎使用本系统!\n中国移动欢迎您!\nvip")
else:
    print("账号或密码错误!")


# 如果希望隐藏输入密码显示:

name=input("name=")
import getpass
password=getpass.getpass("password=")
if name=="admin" and password=="123":
    print("welcome!")
else:
    print("error!")
# 英寸与厘米的转换:
value = float(input("请输入长度: "))
unit = input("请输入单位: ")
if unit == "in" or unit == "英寸":
    print("%f英寸 =%f厘米" % (value, value * 2.54))
elif unit == "cm" or unit == "厘米":
    print("%f厘米 = %f英寸" % (value, value / 2.54))
else:
    print("请输入有效的单位")
#  计算三角形的周长和面积:
import math 
a=float(input("a="))
b=float(input("b="))
c=float(input("c="))
if a+b>c and b+c>a and a+c>b:
    print("三角形的周长是:%.2f"%(a+b+c))
    p=(a+b+c)/2
    s=math.sqrt(p*(p-a)*(p-b)*(p-c))
    print("三角形的面积是:%.2f"%s)
else:
    print("不构成三角形!")

#  摇骰子游戏:

from random import randint
x=randint(1,6)
if x==1:
    print(x,"学狗叫")
elif x==2:
    print(x,"跑两圈")
elif x==3:
    print(x,"真心话冒险")
elif x==4:
    print(x,"唱支歌")
elif x==5:
    print(x,"跳个舞")
else:
    print(x,"请大家吃饭")




该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
<think>我们有一个DataFrame,其中一列是时间格式的字符串(例如'2025-01-01 13:31:23'),我们想要提取周数,并按照'week01'这样的格式输出到新的一列。 步骤: 1. 将字符串列转换为pandas的datetime类型。 2. 使用dt访问器提取周数。 3. 注意:周数需要格式化为两位数字(如1变成01),然后拼接上字符串'week'。 4. 将结果赋值给新列。 但是注意,pandas中提取周数有几种方式: - 使用`dt.isocalendar().week`:返回ISO周(星期一为一周的开始,每年的第一个星期包含至少4天)。 - 使用`dt.week`(注意:在pandas 1.1.0版本后已弃用,改为`dt.isocalendar().week`) - 也可以使用`dt.strftime('%U')`或`%W`,但注意它们分别表示一年中的第几周(%U以星期天为每周第一天,%W以星期一为每周第一天,并且从0开始计数直到53),而且格式是字符串,但是是数字字符串(如"00"到"53"),我们需要的是ISO周。 根据要求,我们想要的是ISO周(通常国际标准),并且格式为'week01',所以使用`dt.isocalendar().week`得到一个整数,然后将其格式化为两位数字,再与'week'拼接。 但是注意:ISO周的规则是,如果第一周在上一年的最后几天,那么它属于上一年的最后一周,或者如果一年的最后几天包含下一年的第一周,那么这些天属于下一年的第一周。所以通常我们使用ISO周。 因此,步骤: 1. 转换列到datetime:`pd.to_datetime` 2. 使用`dt.isocalendar().week`获取周数,得到的是一个整数Series。 3. 将整数格式化为两位字符串:`Series.map(lambda x: f"{x:02d}")` 或者使用`str.zfill`,但这里用格式化字符串更直接。 4. 然后拼接上'week'字符串。 但是注意:我们也可以使用`strftime`直接格式化,但是ISO周数不能用strftime直接得到(因为strftime的%V是ISO周数,但注意pandas的strftime支持%V吗?需要检查pandas文档。实际上,pandas的strftime是调用Python的strftime,而Python的strftime支持%V(ISO8601周数,以星期一为一周开始),不过请注意,%V在有些系统上可能不被支持(但通常现在的系统都支持)。 因此,另一种方法: 使用`dt.strftime('week%V')`,这样可以直接得到'week01'这样的格式。注意:%V会输出01到53,并且是两位数字。 但是要注意:我们要求的是'week01',而%V就是两位数的ISO周数(01-53)。所以这种方法更直接。 所以我们可以: 新列 = df['时间列'].dt.strftime('week%V') 但是,我们需要确保转换后的时间列是datetime类型,并且注意原始列是字符串,需要先转换。 然而,题目中给的格式是'2025-01-01 13:31:23',这个格式pandas可以自动识别,所以转换不会出错。 因此,我们有两种方法: 方法1(使用isocalendar): week_num = pd.to_datetime(df['时间列']).dt.isocalendar().week df['新列'] = 'week' + week_num.astype(str).str.zfill(2) # 或者用格式化,但这里用zfill也可以 方法2(使用strftime): df['新列'] = pd.to_datetime(df['时间列']).dt.strftime('week%V') 注意:方法2更简洁,但是需要确认%V在当前环境是否可用。根据pandas文档,它依赖于底层的strftime函数,在大多数系统上是可用的。 另外,注意:strftime方法返回的是字符串,而isocalendar().week返回的是整数,所以方法1我们需要转换成字符串并填充0。 推荐方法2,因为更简洁。 但是,如果数据中有缺失值(NaT)怎么办?strftime会将NaT转换为字符串'NaT',而isocalendar().week会返回NaN,然后我们拼接字符串时,NaN会变成字符串'weeknan'。所以我们需要处理缺失值。 如果需要处理缺失值,我们可以在转换前或转换后处理。假设我们希望在缺失值处也显示缺失(比如None或NaN),那么我们可以: 方法1:在得到week_num后,用where条件处理: week_str = week_num.where(week_num.notna(), None) # 或者用np.nan,但字符串列中通常用None表示缺失 # 然后拼接,但是注意,如果week_num是整数Series,那么缺失值处填充None后,再格式化会出错。所以我们可以先用字符串表示,然后缺失值处设为None。 方法2:使用strftime,然后替换字符串'NaT'为None?例如: s = pd.to_datetime(df['时间列']) df['新列'] = s.dt.strftime('week%V').replace('NaT', None) 但是,我们也可以选择不处理,根据需求。如果原数据没有缺失,则无需处理。 由于用户没有提到缺失值,我们先按没有缺失值处理。 所以,我们选择方法2。 代码示例: import pandas as pd # 假设df是DataFrame,时间列名为'date_column' df = pd.DataFrame({'date_column': ['2025-01-01 13:31:23', '2025-01-10 08:15:00']}) # 转换为datetime df['date_column'] = pd.to_datetime(df['date_column']) # 使用strftime df['week'] = df['date_column'].dt.strftime('week%V') print(df) 输出: date_column week 0 2025-01-01 13:31:23 week01 # 注意:2025年1月1日属于第一周 1 2025-01-10 08:15:00 week02 # 1月10日属于第二周?这里需要实际验证。 注意:ISO周的定义,第一周是包含该年第一个星期四的那一周,并且星期一为一周的开始。所以2025年1月1日是星期三,那么第一周是从2024年12月30日(星期一)到2025年1月5日(星期日)。所以1月1日是第一周,1月10日属于第二周(1月6日到12日)。 因此,我们的方法是正确的。 但是,注意:strftime的%V在pandas中是从0开始计数还是1?实际上,ISO周是从1到53,所以%V是从01到53,第一个星期一所在的周为01(如果1月1日是星期一、二、三或四,那么第一周包含1月1日,否则上一年的最后一周可能包含1月1日,而第一周从1月的第一个星期一开始)。 因此,我们使用%V是符合要求的。 综上所述,我们使用dt.strftime('week%V')。 但是,如果用户希望周数从星期天开始?题目没有特别说明,所以默认使用ISO周(星期一为一周开始)。 另外,题目要求输出格式为'week01',所以符合。 因此,我们可以这样写代码: df['新列'] = pd.to_datetime(df['时间列']).dt.strftime('week%V') 注意:如果时间列中有空值,那么转换后会得到字符串'NaT',我们可以将其替换为None,或者用其他方法处理。如果需要,可以添加一步替换: df['新列'] = df['新列'].replace('NaT', None) 或者 df['新列'] = df['新列'].replace('NaT', pd.NA) # 如果pandas版本支持,使用pd.NA(1.0以后) 但是,如果原列有空字符串等,转换后也会是NaT,所以需要谨慎。 最后,我们给出完整代码示例(假设列名为'time_column'): df['new_week_column'] = pd.to_datetime(df['time_column']).dt.strftime('week%V') 如果遇到空值需要处理: # 先转换 s = pd.to_datetime(df['time_column'], errors='coerce') # 如果遇到无法转换的,设置为NaT df['new_week_column'] = s.dt.strftime('week%V') df['new_week_column'] = df['new_week_column'].replace('NaT', None) # 或者替换成空字符串等 这样更安全。 因此,完整的步骤是: import pandas as pd # 假设df是已有的DataFrame,时间列名为'time_col' # 将该列转换为datetime,错误设为NaT time_series = pd.to_datetime(df['time_col'], errors='coerce') # 使用strftime格式化为'week%V' week_series = time_series.dt.strftime('week%V') # 将NaT对应的字符串替换为None(或根据需求替换为其他值) week_series = week_series.replace('NaT', None) # 将结果赋值给新列 df['week_col'] = week_series 这样即可。 注意:如果原列已经是datetime类型,则无需转换,直接用dt.strftime即可。 所以,根据用户的数据情况,可能不需要第一步pd.to_datetime(如果已经是datetime类型)。 如果用户的数据已经是datetime64类型,那么直接: df['week_col'] = df['time_col'].dt.strftime('week%V').replace('NaT', None) 总结:我们推荐使用strftime方法,因为其简洁且直接生成所需格式。 </think>在 Pandas Dataframe 中,将时间格式为 `'2025-01-01 13:31:23'` 的列提取周数并以 `'week01'` 格式输出新列,可通过以下步骤实现: ### 完整代码实现 ```python import pandas as pd # 假设DataFrame为df,时间列名为'time_column' df = pd.DataFrame({ 'time_column': ['2025-01-01 13:31:23', '2025-01-08 08:45:00', '2025-02-15 20:30:45'] }) # 步骤1: 转换为datetime类型 df['time_column'] = pd.to_datetime(df['time_column']) # 步骤2: 提取ISO周数并格式化为'week01'样式 df['week_column'] = df['time_column'].dt.strftime('week%V') # %V返回ISO周数(01-53) print(df) ``` ### 输出结果 ``` time_column week_column 0 2025-01-01 13:31:23 week01 # 2025年1月1日属于第1周 1 2025-01-08 08:45:00 week02 # 2025年1月8日属于第2周 2 2025-02-15 20:30:45 week07 # 2025年2月15日属于第7周 ``` ### 关键技术说明 1. **时间转换** `pd.to_datetime()` 将字符串列转换为 Pandas 的 `datetime64[ns]` 类型,这是处理时间序列数据的基础[^2]。 2. **ISO周数提取** - `.dt.strftime('week%V')`:`%V` 是 ISO 8601 标准的周数格式(01~53),特点: - **周一作为每周第一天** - 每年第一周包含该年的第一个星期四 - 自动补零(如 `week01` 而非 `week1`) - 替代方案(不推荐): ```python # 需要手动补零,代码更复杂 df['week_column'] = 'week' + df['time_column'].dt.isocalendar().week.astype(str).str.zfill(2) ``` 3. **空值处理建议** 若原始数据含无效日期,添加错误处理: ```python df['time_column'] = pd.to_datetime(df['time_column'], errors='coerce') df['week_column'] = df['time_column'].dt.strftime('week%V').replace('NaT', None) ``` ### 应用场景 此方法适用于: 1. 用户行为分析中的周粒度留存统计 2. 金融时间序列的周维度聚合 3. 日志数据的周期性分析[^1][^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值