Pandas数据清洗实战:从apply、map到异常值处理的完整流程
从拿到一份原始数据到真正敢拿它做决策中间隔着一条很长的路。很多时候新手学Pandas今天学一个fillna()明天学一个groupby()知识点全是散的真拿到一份带空值、带异常、列名混乱的数据时照样不知道从哪里下手。今天这篇我想把这几个高频功能——apply()、map()、描述统计、协方差相关性、异常值处理——串成一条线来讲它们组合在一起其实就是一次完整的数据探查与清洗流程。适合刚学完Pandas基础语法、想进入实战阶段的人也适合那些已经写了一阵子df[...]切片、但对“怎么系统地把一份数据摸清楚”还缺一套思路的朋友。1. 为什么这五个功能要放在一起看单独看apply()是一个函数map()是一个函数describe()是一个函数好像没什么关联。但在实际分析任务里它们是一条流水线上的工序。先想一个问题你接手一份销售订单表有客户ID、订单金额、下单时间、商品分类、数量、单价这些字段第一步该做什么不是急着画图也不是直接丢进模型。你要先做三件事把字段加工成能用的形式比如把金额字符串转成数字、把分类编码转成中文、把整体分布摸一遍均值、中位数、有没有极端值、再判断字段之间有没有关系金额和数量是不是正相关。这三步对应的正是map/apply、描述统计、协方差相关性。而无论哪一步都可能被异常值干扰——订单金额突然出现一个负数、数量出现10000件这种脱离业务常识的记录。所以异常值处理不是最后才做的“优化项”而是贯穿全程的“清理项”。这五个功能放在一起学最大的价值是帮你建立一种“流程感”拿到任何数据都知道先做什么、后做什么、每一步用什么工具。下面我按这个流程逐个拆开讲每一段都给出可跑的代码和我在实际项目中踩过的坑。2. apply() 方法让函数按行、按列批量干活2.1 apply 的基本用法与执行逻辑apply()的核心作用是把一个Python函数应用到DataFrame的行或列上它解决的是“循环不好写、写起来慢”的问题。假设你有一列订单金额单位是分需要转成元并保留两位小数import pandas as pd df pd.DataFrame({ order_id: [1001, 1002, 1003], amount_cents: [129900, 5600, 88230] }) def cents_to_yuan(x): return round(x / 100, 2) df[amount_yuan] df[amount_cents].apply(cents_to_yuan) print(df)order_id amount_cents amount_yuan 0 1001 129900 1299.00 1 1002 5600 56.00 2 1003 88230 882.30这里apply()的默认行为是按列遍历DataFrame的每一列被视为一个Series传入函数。所以当你写df.apply(func)时func接收的是整个列而不是单个值。如果你想按行处理加参数axis1df[total] df.apply(lambda row: row[quantity] * row[unit_price], axis1)axis1的时候函数接到的是一整行可以通过row[列名]的方式访问多个字段。这个用法在处理“需要根据多列计算新列”的场景里非常常见。2.2 apply 与 applymap、aggregate 的边界很多人分不清apply、applymap、aggregate。我直接给结论apply()用于DataFrame按行或按列应用函数返回Series或DataFrame。applymap()用于DataFrame逐元素应用函数返回同形状的DataFrame。比如把所有数值格式化成字符串、把所有负数标红就用它。aggregate()也就是agg()按行或按列同时应用一个或多个聚合函数返回的是聚合结果。用代码区分一下# applymap: 每个单元格都处理 df[[amount_cents, quantity]].applymap(lambda x: format(x, ,)) # agg: 多个聚合函数一次性算 df[[amount_cents, quantity]].agg([sum, mean, max])applymap和apply在性能上都不适合处理超大DataFrame比如千万行级别因为本质上是Python层的循环。真到大数据量优先想办法用向量化操作或groupby().transform()代替。2.3 apply 的性能陷阱与替代方案apply()用起来爽但有个隐藏成本它是在Python解释器里逐行调用函数的没法利用底层C语言向量化的加速。我实测过百万级DataFrame上跑一个简单的lambda x: x 1apply()耗时大约是直接向量化运算的20倍以上。所以我的经验是单列运算且能用、-、*、/、np.where()解决的不要用apply()需要多列联合计算、逻辑比较复杂、有自定义规则的用apply(axis1)是合理的数据量超过几十万行时优先考虑np.vectorize()或先构造映射字典用map()。# 性能对比示例 import numpy as np import time big_df pd.DataFrame({a: np.random.randn(1_000_000)}) t0 time.time() big_df[b] big_df[a] 1 print(向量化:, time.time() - t0) t0 time.time() big_df[c] big_df[a].apply(lambda x: x 1) print(apply:, time.time() - t0)实测结果通常是向量化不到0.05秒apply在0.5秒到1秒之间。数据量越大差距越明显。3. map() 配对用字典和映射做数据转换3.1 map 做字典映射把编码换成可读信息业务数据里最常见的场景是“编码列翻译”。比如商品分类列里存的是A、B、C你想换成数码、家电、服饰。map()一行搞定category_map {A: 数码, B: 家电, C: 服饰} df[category_name] df[category].map(category_map)map()接受一个字典、一个Series或者一个函数作为参数。传字典时它会把Series里的每个值去字典里查查到就返回映射后的值查不到则返回NaN。这一点特别重要——如果你的映射字典没有覆盖所有取值结果里会出现空值而且不会报错属于“静默风险”。更隐蔽的问题是如果列本身有缺失值map()会把NaN也映射成NaN这时候再往下游计算可能触发“NaN参与运算”的连锁反应。我通常的做法是映射前先确认取值集合print(df[category].value_counts())print(set(df[category]) - set(category_map.keys()))先看清真实取值有哪些再写映射字典能省掉后面排查空值的大量时间。3.2 用 map 做分箱从连续值到等级标签除了编码翻译map()还能配合自定义函数做分箱。比如按订单金额把客户分成高、中、低三档def amount_level(amount): if amount 10000: return 高 elif amount 1000: return 中 else: return 低 df[amount_level] df[amount_yuan].map(amount_level)注意这里map()接收函数时和apply()的效果类似但map()只针对Series返回的是新Series。用map()而不是apply()的额外好处是如果Series里有NaNmap()直接返回NaN不会把函数作用上去报错。3.3 map 与 replace 的对比选哪个看需求很多新手会问map()和replace()不都是做替换吗区别在哪我的判断标准是要做新列选map()因为它返回新Series方便赋值给新字段要原地替换原列里的值选replace()它修改后不引入NaN而且支持正则和列表批量替换要处理多列同一套映射replace()更方便因为它可以直接作用于DataFrame。# replace 原地替换 df[category] df[category].replace(category_map) # replace 多列一起替换 df[[category, sub_category]] df[[category, sub_category]].replace(category_map)这里要说一个技巧map()查不到的键返回NaNreplace()查不到的键保留原值。这个差异决定了它们在数据清洗中的不同角色。如果只是想“补充可读信息保留原始编码”map更合适如果要“修正脏数据”replace更合适。4. 描述性统计用 describe() 快速掌握数据全貌4.1 describe() 输出指标逐项解读describe()是探查数据的第一步几行代码就能给出数据的中心趋势和离散程度df[[amount_yuan, quantity]].describe()输出长这样数值为示例amount_yuan quantity count 1000.000 1000.00000 mean 854.230 15.24000 std 721.110 8.47000 min 12.300 1.00000 25% 312.400 9.00000 50% 655.000 14.00000 75% 1180.500 20.00000 max 6890.000 240.00000每个指标的含义要说清楚count非空值数量。如果count少于总行数说明这一列有缺失值需要回头处理。mean均值对异常值敏感。std标准差反映数据波动。min、25%、50%、75%、max五数概括。50%就是中位数如果中位数远小于均值说明数据右侧有长尾存在很大的极端值。这里面最值得关注的是均值和中位数的差异。我以前接过一份薪资数据均值12000中位数8500说明少数高薪把均值拉上去了如果直接拿均值做预算会严重失真。描述统计不是看个数字就完事而是在回答“这份数据到底是什么形态”。4.2 加参数定制输出percentiles、include、excludedescribe()默认只输出数值列而且百分位数固定是25/50/75。实际使用中我经常改两个参数# 自定义百分位多关注极端分布 df[amount_yuan].describe(percentiles[0.05, 0.1, 0.9, 0.95]) # 数值列 对象列一起看 df.describe(includeall)includeall会额外输出分类列的unique唯一值数量、top出现最多的值、freq最高频次这对快速判断分类字段的分布很有用。还有一个小技巧用df.describe().T把结果转置字段一多的时候转置成行更易读。4.3 偏度与峰度比 describe 更进一步的分布判断describe()不提供偏度和峰度但这两项对判断数据形态很有用。Pandas里直接调skewness df[amount_yuan].skew() kurtosis df[amount_yuan].kurt() print(偏度:, skewness, 峰度:, kurtosis)偏度大于0右偏数据右侧尾巴长有高值异常的可能偏度小于0左偏数据左侧尾巴长峰度大于0数据比正态分布更尖存在极端离群点。我通常在异常值处理前后各算一次偏度如果处理完偏度从5降到0.5说明清洗是有效的。这件事用describe()看不出来但偏度变化的数值很直观。5. 协方差与相关性量化字段之间的关系5.1 cov() 和 corr() 的基本使用描述统计回答“每个字段长什么样”协方差和相关性回答“字段之间有没有关系”。这两者在Pandas里就是两个方法# 协方差矩阵 df[[amount_yuan, quantity]].cov() # 相关系数矩阵 df[[amount_yuan, quantity, unit_price]].corr()协方差的问题在于它的单位是“两个变量单位的乘积”数值大小受量纲影响没法直接判断相关强弱。所以实际分析里我用得最多的是corr()它把协方差归一化到[-1, 1]之间便于比较。输出一个示例相关系数矩阵amount_yuan quantity unit_price amount_yuan 1.000000 0.628400 0.843100 quantity 0.628400 1.000000 0.240300 unit_price 0.843100 0.240300 1.000000这里的解读方式是看对称矩阵的每个单元格金额和单价的相关系数0.843说明高度正相关金额和数量的相关系数0.628中等正相关。相关系数不是斜率它只说“变化的趋势方向一致”不说“单价涨1块金额涨多少”。5.2 皮尔逊与斯皮尔曼什么时候选哪个corr()默认计算皮尔逊相关系数它衡量的是线性相关。如果变量关系是非线性的比如指数增长、对数关系皮尔逊系数可能很低但斯皮尔曼相关系数能捕捉单调关系。# 斯皮尔曼相关 df[[amount_yuan, quantity]].corr(methodspearman) # 肯德尔相关适用于排序数据 df[[amount_yuan, quantity]].corr(methodkendall)我的选择逻辑数值都是连续型、大体呈线性关系用pearson数据存在明显偏态、或关系不一定是线性但单调用spearman数据是多个评委的排序、等级评分用kendall。实际项目里建议把pearson和spearman都算一遍如果两者差异很大说明可能存在非线性关系或者受异常值影响需要进一步画散点图确认。5.3 相关性分析最容易犯的错相关性这一节我觉得最有必要讲的是“坑”而不是操作。三个最常见的误解第一相关系数高不代表有因果关系。电商数据里“下单时间和成交金额”可能高度相关但原因可能是夜间用户占比高、订单量大而是其他因素共同作用的结果。第二异常值会扭曲相关系数。我曾经在一个数据集里算促销金额和销量的相关性算出来是0.9觉得很理想。后来发现是因为一个超级大单把相关系数拉上去了删掉这个记录后相关性降到0.4。先做异常值处理再做相关性分析顺序不能反。第三矩阵对角线永远为1这个不是发现是定义。看相关矩阵时重点看非对角线元素。如果要做进一步分析可以用corr().unstack()把矩阵转成一对对的关系列表再排序corr_pairs df.corr().unstack().sort_values(ascendingFalse) print(corr_pairs[corr_pairs 1].drop_duplicates().head())这招在字段特别多的时候非常实用能帮你快速找出关系最强的几对字段。6. 异常值处理数据清洗里最考验判断力的一步6.1 先用 IQR 方法识别异常值异常值处理的第一步是识别。最常用的非参数方法是IQR四分位距法因为它不受极端值影响逻辑也简单Q1 df[amount_yuan].quantile(0.25) Q3 df[amount_yuan].quantile(0.75) IQR Q3 - Q1 lower_bound Q1 - 1.5 * IQR upper_bound Q3 1.5 * IQR outliers df[(df[amount_yuan] lower_bound) | (df[amount_yuan] upper_bound)] print(异常值数量:, len(outliers))系数1.5是经验值不是数学定理。它假设数据近似正态分布时落在区间外的比例约为0.7%。如果业务场景对异常更敏感可以把系数调成3只揪出更极端的值如果想更严格排查可以调到1.0。这里有一个容易忽略的点quantile()本身在有缺失值时会返回NaN所以使用IQR前必须确保列里没有NaN。我是先用dropna()或fillna()处理缺失再算分位数。6.2 另一种常用方法Z-score 与 3σ 原则如果数据近似正态分布可以用Z-score方法。它的逻辑是计算每个值与均值的距离再除以标准差得到标准化分数通常绝对值超过3就被认定为异常值。from scipy import stats z_scores np.abs(stats.zscore(df[amount_yuan])) threshold 3 outliers_idx np.where(z_scores threshold)[0] print(异常值索引:, outliers_idx)Z-score方法对均值和标准差敏感而均值和标准差恰恰容易被异常值本身污染。数据里存在极端离群点时Z-score计算出来的标准差偏大可能让真正的异常值“藏”起来。我的使用习惯是先用IQR法粗筛一轮去掉最极端的几个点再用Z-score细筛这样两个方法的缺陷能互补。6.3 处理异常值的四种策略识别出异常值后怎么处理完全取决于业务背景。我遇到过的情况基本分成四类第一类是删除。只占总样本比例的极少数比如不超过1%-2%可以直接删除。删除前一定先备份原始数据因为后续分析可能需要回溯。clean_df df[(df[amount_yuan] lower_bound) (df[amount_yuan] upper_bound)]第二类是截尾也叫缩尾处理。把超过上下界的值压到边界值保留样本量但削弱异常影响。df[amount_winsorized] df[amount_yuan].clip(lowerlower_bound, upperupper_bound)第三类是替换。用中位数、均值或其他合理值填充异常值。这个适合“金额明显录入错误但订单确实存在”的情况。median_amount df[amount_yuan].median() df.loc[df[amount_yuan] upper_bound, amount_yuan] median_amount第四类是单独标记加一列标识不修改原值。适合异常值本身有分析价值的情况比如超高金额订单可能意味着团购客户、异常退货可能意味着系统盗刷。df[is_outlier] ((df[amount_yuan] lower_bound) | (df[amount_yuan] upper_bound)).astype(int)我个人强烈不建议“无脑删除”。数据分析里删除异常值有时候等于删掉了真实业务信号。我在一个电商项目里发现一个“异常”用户——购买频次低、单笔金额极大后来确认是企业采购账号这根本不是异常而是业务分层里的重要客户类型。6.4 异常值处理的前置顺序再强调一遍执行顺序空值处理先于异常值处理。原因很简单IQR和Z-score都依赖分布计算而NaN会干扰分位数和标准差。我固定的流程是先describe()看count和min/max初步判断有没有空值、负值、极端值处理空值删除或填充计算IQR/Z-score识别异常值结合业务决定删除、截尾还是替换处理完再跑一次describe()对比前后差异确认清洗效果。这套流程虽然简单但非常抗忽悠。凡是敢说“数据清洗我处理过了”的人我会先要他的前后describe()对比没有对比就是在拍脑袋。7. 常见问题与排查心得这些坑我替你踩过了7.1 问题速查表我把实际使用中高频遇到的问题整理成一张表方便直接对照排查问题现象可能原因解决办法apply()后返回多列但DataFrame只有一列函数返回的是Series但没用result_typeexpand在apply()加result_typeexpand参数map()后出现大量NaN字典没覆盖所有取值或源列本身有NaN先value_counts()确认取值再补映射describe()看不到分类列默认只统计数值列加includeallcorr()结果大量为NaN列里有空值或常量列先处理空值删除方差为零的列std()结果明显异常大存在极端异常值先做异常值识别和处理apply(axis1)非常慢Python层逐行循环数据量大改用向量化、np.where()或groupby().transform()7.2 apply 返回多列的细节这个坑值得单独说。apply(axis1)时如果函数返回的是pd.Series DataFrame的行数不会变但列数取决于映射方式。def calc(row): subtotal row[quantity] * row[unit_price] tax subtotal * 0.1 return pd.Series({subtotal: subtotal, tax: tax}) df[[subtotal, tax]] df.apply(calc, axis1)如果漏了pd.Series直接返回元组Pandas会把元组拆成多列但列名是0、1、2这种数字后面还要手动改名。所以我的习惯是直接构造pd.Series并带上列名一步到位。7.3 fillna 对异常值识别的干扰还有一次我在处理一组用户活跃天数数据时先用了fillna(0)填充空值——活跃天数缺失确实应该填0这个逻辑没问题。但填充完直接跑IQR结果出现了大量“异常值”因为有一批用户确实是0天导致Q1为01.5倍IQR的下界也变成负数所有大于某个阈值的用户都被标记为异常。实际这些用户只是高质量活跃用户。这个问题的教训是你要识别的是“真实的异常”而不是“分布上的离群点”。分布离群不等于异常业务背景才是最终标准。先想清楚“这个字段在这个业务场景下什么样的值才算异常”再选参数和方法。7.4 一个完整的清洗流程示例最后给一个整合了本文所有功能的完整示例你可以直接拿去改着用import pandas as pd import numpy as np # 加载数据模拟 df pd.read_csv(sales_data.csv) # 1. 描述统计初筛 print(df.describe(percentiles[.05, .5, .95]).T) # 2. 处理空值简单示例用中位数填充 df[amount] df[amount].fillna(df[amount].median()) # 3. 用 map 做字典映射 df[category_name] df[category].map({A: 数码, B: 家电}) # 4. 用 apply 构造新字段 df[amount_level] df[amount].apply( lambda x: 高 if x 10000 else (中 if x 1000 else 低) ) # 5. 异常值识别IQR Q1, Q3 df[amount].quantile([0.25, 0.75]) IQR Q3 - Q1 low, high Q1 - 1.5 * IQR, Q3 1.5 * IQR df[outlier_flag] ((df[amount] low) | (df[amount] high)).astype(int) # 6. 相关性分析清理后 print(df[[amount, quantity]].corr(methodspearman))说到底Pandas这套工具不复杂复杂的是你想清楚每一步为什么要这么做。我见过很多人把apply()用得飞起却从没给数据做过一次describe()也见过有人一上来就删异常值删完才发现删掉的全是VIP客户。工具都在文档里但“什么场景用什么、怎么用”才是真正的经验积累。我自己养成了一个习惯每次拿到新数据集先花10分钟跑一遍describe()、info()、value_counts()把每个字段的分布和缺失情况打印出来贴在自己电脑前再开始任何处理。这几分钟看起来“没干活”实际上省掉了后面几小时的返工。希望你也能把这套流程变成自己的肌肉记忆。

相关新闻

PyTorch实战:从零搭建CNN训练MNIST手写数字识别

PyTorch实战:从零搭建CNN训练MNIST手写数字识别

1. 从零手搓一个CNN跑通MNIST:为什么值得你花时间如果你刚接触深度学习,或者已经用过现成的框架但总觉得心里没底,那我建议你亲手用PyTorch搭一个卷积神经网络,把MNIST数据集从头到尾跑一遍。这件事听起来像是入门教程里的老生常谈…

2026/10/17 4:54:15 阅读更多 →
superpowers:为AI编程助手装上“上下文外挂”

superpowers:为AI编程助手装上“上下文外挂”

做 AI 辅助开发这两年,我试过不少工具,但真正让我觉得像给 Copilot、Codex 这类助手装上“外挂”的,是 superpowers 这个 VS Code 扩展。它不是又一个聊天面板,也不是什么代码生成模型,而是一套把“你怎么跟 AI 描述需…

2026/10/17 4:54:15 阅读更多 →
Superpowers技能库实战:让Codex/Claude Code按流程工作

Superpowers技能库实战:让Codex/Claude Code按流程工作

superpowers 最近在 AI 编程助手圈子里的热度确实高,如果你在 Codex CLI、Claude Code 这类终端 agent 上折腾过,多半已经看过不少人把它当作"必装技能库"来推荐。简单说,superpowers 不是一堆零散的提示词,而是一套能挂…

2026/10/17 4:54:15 阅读更多 →

最新新闻

SPIRAL方法解析:自博弈与多智能体强化学习如何提升推理能力

SPIRAL方法解析:自博弈与多智能体强化学习如何提升推理能力

最近看到一套叫 SPIRAL 的训练方法,全称是 Self-Play on Zero-Sum Games Incentivizes Reasoning via Multi-Agent Multi-Turn Reinforcement。直译过来很拗口:在零和博弈上做自我对弈,通过多智能体多轮强化学习去激励推理能力。但我盯着这个…

2026/10/17 5:38:28 阅读更多 →
科研绘图与学术图表绘制书籍

科研绘图与学术图表绘制书籍

科研论文配图绘制指南 科研论文配图设计与制作 书籍 科研论文配图绘制指南 科研论文配图设计与制作 书籍_科研论文配图设计与制作从入门到精通pdf-CSDN博客 AI科研绘图:Nano Banana极速实战指南(2026.06) Nano Banana 全场景应用手册&#xf…

2026/10/17 5:38:28 阅读更多 →
MiniMax H3 本地部署实测:Apple M3 Ultra 跑通视频生成全流程

MiniMax H3 本地部署实测:Apple M3 Ultra 跑通视频生成全流程

端脑科技最近拿到了一台 Apple M3 Ultra 工作站,第一件事就是把 MiniMax H3 的本地运行流程完整踩了一遍。先说结论:MiniMax H3 不是那种只能在云上跑的“云端玩具”,它在 M3 Ultra 上不仅跑得动,还能通过 Transformers 加载权重、…

2026/10/17 5:38:28 阅读更多 →
Whisper离线部署车机实践:从语音识别到指令闭环

Whisper离线部署车机实践:从语音识别到指令闭环

做车机语音这行的人,估计都有过这种崩溃瞬间:车主跑高速开着窗,对着车机喊了一句"下一首",结果车机把副驾放的音乐识成了"切到印度",或者干脆回了句"没听清,请再说一遍"。车…

2026/10/17 5:38:28 阅读更多 →
DDR4内存条原理图与PCB设计:从Fly-by拓扑到信号完整性避坑指南

DDR4内存条原理图与PCB设计:从Fly-by拓扑到信号完整性避坑指南

简介:这份资源面向电子工程师、计算机硬件爱好者与DIY玩家,提供DDR4内存条的完整硬件设计文件,帮助理解内存条从原理图到PCB布局的实现细节。压缩包共10个文件,约2.29MB,包含5个SchDoc原理图、1个PcbDoc电路板文件、1个…

2026/10/17 5:38:28 阅读更多 →
手动测试与自动化测试怎么选?优缺点、适用场景与组合策略

手动测试与自动化测试怎么选?优缺点、适用场景与组合策略

做了这么多年测试,每次跟同行聊到“手动测试和自动化测试哪个好”,基本都能吵上一阵。有人说自动化是趋势,手动早晚被淘汰;也有人说自动化就是给自己找事,脚本维护比手工点点点还累。说实话,两种观点我都能…

2026/10/17 5:37:28 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →