当前位置:首页>python>从零开始学Python数据清洗(十二)

从零开始学Python数据清洗(十二)

  • 2026-07-03 02:16:26
从零开始学Python数据清洗(十二)

构建完整的数据清洗流水线 + 系列总结

前11篇,我们像搭积木一样学了 pandas 的各种工具——从读文件到合并、从处理缺失值到分组聚合。但真实工作中,你会拿到一张"完全不干净"的原始表。今天我们不学新工具,而是学怎么把工具串起来,做一条自动化清洗流水线。这也是一篇适合收藏的工作手册。

文中涉及到的数据文件可以联系我发给你,因为我还不知道怎么在公众号插入文件


一、pipe:让操作可以串联

pandas 大多数方法都返回 DataFrame,所以你可以链式调用——但自定义函数不行。

# 这样写会报错,因为drop_duplicates返回的DataFrame上找不到clean_text方法df.drop_duplicates().clean_text()

.pipe() 解决了这个问题:它把一个函数作为参数,把当前 DataFrame 传入函数,再返回处理后的 DataFrame。

def clean_text(df):    """清理所有文本列的前后空格"""    text_cols = df.select_dtypes(include='object').columns    df = df.copy()    for col in text_cols:        df[col] = df[col].str.strip()    return df# 用pipe把自定义函数接入链式调用df_clean = (df    .drop_duplicates()    .pipe(clean_text)        # pipe在这里接上了自定义函数    .reset_index(drop=True))

.pipe() 的本质就是把 df 传给函数,再拿回返回值。相当于 clean_text(df),但它允许你写成优雅的链式调用风格。


二、编写清洗函数的原则

把每个清洗步骤封装成一个独立函数,是建立流水线的前提。好的清洗函数遵循三个原则:

原则一:一个函数只做一件事

不好的写法
好的写法
def clean_all(df):
 做5件事
def fix_dtypes(df):
 只修类型
函数名字含糊
函数名即意图

原则二:永远返回一个 DataFrame

无论内部做了什么,函数的 return 类型一定是 pd.DataFrame。这保证了链条不会断。

原则三:接受并转发 **kwargs

给灵活性留个口子——调用者可能需要传参数给内部方法。

def remove_duplicates(df, **kwargs):    subset = kwargs.get('subset', None)    keep = kwargs.get('keep', 'first')    return df.drop_duplicates(subset=subset, keep=keep)# 可以指定去重列df_clean = remove_duplicates(df, subset=['emp_id'])

三、组装流水线

把各个清洗函数用 .pipe() 串在一起,就是一条清洗流水线:

import pandas as pd# ===== 步骤1:去除重复行 =====def remove_duplicates(df):    before = len(df)    df = df.drop_duplicates()    after = len(df)    print(f"[去重] {before} → {after} 行 (移除 {before - after} 行)")    return df# ===== 步骤2:修正数据类型 =====def fix_dtypes(df):    df = df.copy()    # 日期列转为datetime    if 'hire_date' in df.columns:        df['hire_date'] = pd.to_datetime(df['hire_date'], errors='coerce')    # 薪资转为float    if 'salary' in df.columns:        df['salary'] = pd.to_numeric(df['salary'], errors='coerce')    # 年龄转为float再转int(如果全部合法)    if 'age' in df.columns:        df['age'] = pd.to_numeric(df['age'], errors='coerce')    print("[类型修正] 完成")    print(df.dtypes.to_string())    return df# ===== 步骤3:处理缺失值 =====def handle_missing(df):    df = df.copy()    for col in df.columns:        missing = df[col].isnull().sum()        if missing == 0:            continue        pct = missing / len(df) * 100        if df[col].dtype in ['float64', 'int64']:            # 数值列用中位数填充            df[col] = df[col].fillna(df[col].median())            print(f"[缺失处理] {col}: {missing}个缺失 ({pct:.1f}%) → 中位数填充")        else:            # 分类/文本列用众数填充            mode_val = df[col].mode()            if len(mode_val) > 0:                df[col] = df[col].fillna(mode_val[0])                print(f"[缺失处理] {col}: {missing}个缺失 ({pct:.1f}%) → 众数填充")    return df# ===== 步骤4:标准化文本 =====def standardize_text(df):    df = df.copy()    text_cols = df.select_dtypes(include='object').columns    for col in text_cols:        df[col] = df[col].astype(str).str.strip()        # 统一大小写(对部门等分类列特别有用)        if col in ['department', 'gender', 'education']:            df[col] = df[col].str.replace('nan', pd.NA)    print("[文本标准化] 完成")    return df# ===== 步骤5:数据验证 =====def validate(df):    print("\n===== 数据验证 =====")    checks = []    # 检查:emp_id是否有重复    if 'emp_id' in df.columns:        dup_count = df['emp_id'].duplicated().sum()        result = '通过' if dup_count == 0 else f'失败 (重复{dup_count}个)'        checks.append(('员工ID唯一性', result))        print(f"  员工ID唯一性: {result}")    # 检查:salary范围    if 'salary' in df.columns:        valid_sal = (df['salary'] > 0).sum()        result = '通过' if valid_sal == len(df) else f'失败 ({len(df) - valid_sal}条异常)'        checks.append(('薪资>0', result))        print(f"  薪资>0: {result}")    # 检查:年龄范围    if 'age' in df.columns:        valid_age = df['age'].between(18, 80).sum()        result = '通过' if valid_age == len(df) else f'失败 ({len(df) - valid_age}条异常)'        checks.append(('年龄18-80', result))        print(f"  年龄18-80: {result}")    print(f"\n总计: {sum(1 for _, v in checks if '通过' in v)}/{len(checks)} 项通过")    return df# ===== 组装流水线 =====def clean_pipeline(df):    return (df        .pipe(remove_duplicates)        .pipe(fix_dtypes)        .pipe(handle_missing)        .pipe(standardize_text)        .pipe(validate)    )

流水线的好处:你可以像读菜单一样从上到下看懂整个清洗流程,改一个步骤不影响其他步骤,而且任何一个函数都可以单独拿出来测试。


四、完整案例:清洗员工数据

下面我们用一个完整的、end-to-end 的案例把整个系列串起来。

第一步:加载并查看结构

import pandas as pdimport numpy as npdf = pd.read_csv('employee_data.csv')print("=== 数据结构 ===")print(df.info())print(f"\n行数: {len(df)}, 列数: {len(df.columns)}")print(f"列名: {df.columns.tolist()}")

第二步:检查缺失值

print("\n=== 缺失值统计 ===")missing = df.isnull().sum()missing_pct = (missing / len(df) * 100).round(1)missing_report = pd.DataFrame({    '缺失数': missing,    '缺失率(%)': missing_pct})print(missing_report[missing_report['缺失数'] > 0])

第三步:检查重复

# 按员工ID检查dup_emp = df[df['emp_id'].duplicated(keep=False)]print(f"\n重复的员工ID: {len(dup_emp)}条 ({df['emp_id'].duplicated().sum()}个重复)")# 整体检查full_dup = df.duplicated().sum()print(f"完全重复的行: {full_dup}条")

第四步:修正数据类型

# 日期转换df['hire_date'] = pd.to_datetime(df['hire_date'], errors='coerce')# 数值转换df['salary'] = pd.to_numeric(df['salary'], errors='coerce')df['age'] = pd.to_numeric(df['age'], errors='coerce')print("\n修正后的数据类型:")print(df.dtypes)

第五步:处理异常值

# 年龄异常检查age_outliers = df[(df['age'] < 18) | (df['age'] > 75)]print(f"年龄异常: {len(age_outliers)}条")if len(age_outliers) > 0:    print(age_outliers[['emp_id', 'name', 'age']])# 工资异常检查(用IQR法)Q1 = df['salary'].quantile(0.25)Q3 = df['salary'].quantile(0.75)IQR = Q3 - Q1lower = Q1 - 1.5 * IQRupper = Q3 + 1.5 * IQRsal_outliers = df[(df['salary'] < lower) | (df['salary'] > upper)]print(f"\n工资异常(IQR法): {len(sal_outliers)}条")

第六步:标准化文本

# 去除前后空格text_cols = df.select_dtypes(include='object').columnsfor col in text_cols:    df[col] = df[col].str.strip()# 检查department的异常值print("\n部门分类:")print(df['department'].value_counts())# 如果有'nan'字符串,替换为真正的缺失值df['department'] = df['department'].replace('nan', np.nan)# 统一education的写法(把"本科"、"_本科"统一)print(f"\n学历分类: {df['education'].value_counts().to_dict()}")

第七步:补充部门信息

dept = pd.read_csv('department_data.csv')# 合并前检查print(f"部门表department唯一性: {dept['department'].is_unique}")df = pd.merge(df, dept, on='department', how='left', validate='m:1')# 简单看下合并结果print(f"\n合并后列数: {len(df.columns)}")print(f"新增列: manager, floor, headcount, dept_code")

第八步:最终验证与保存

print("\n===== 最终数据概况 =====")print(f"行数: {len(df)}, 列数: {len(df.columns)}")print(f"缺失值总数: {df.isnull().sum().sum()}")print(f"数据类型: \n{df.dtypes.value_counts().to_string()}")# 保存清洗后的数据output_path = 'employee_data_clean.csv'df.to_csv(output_path, index=False, encoding='utf-8-sig')print(f"\n清洗完成,已保存至: {output_path}")

五、数据清洗检查清单

拿来做一张速查表。每次拿到新数据,按顺序跑一遍:

#
检查项
怎么做
关键函数
1
了解结构
看行列数、列名、数据类型、内存占用
.info()
.shape
2
统计摘要
数值列的分布和异常值
.describe()
3
缺失值
每列缺失点数与占比
.isnull().sum()
4
重复行
完全重复和关键列重复
.duplicated()
5
数据类型
日期是不是object?数字是不是str?
.dtypes
6
异常值
IQR法或z-score法
.quantile()
.std()
7
分类变量
有哪些类别?是否有拼写错误?
.value_counts()
8
文本规范
前后空格、大小写、编码统一
.str.strip()
.str.lower()
9
关联一致性
外键能否匹配?(如部门名)
merge(indicator=True)
10
记录变更
每一步做什么、为什么
函数名 + print日志

建议把这个清单打印出来贴在工位上——前5次照着做,以后就变成肌肉记忆了。


六、系列回顾:12篇学习路径

这是我们"从零开始学Python数据清洗"系列的第12篇,也是最后一篇。来回顾一下这趟旅程:

入门篇(第1-3篇):打开Python数据分析的大门

  • • 第1篇:环境搭建——安装 Anaconda、VS Code,运行第一行 print("Hello")
  • • 第2篇:数据结构入门——Series 和 DataFrame 是什么,索引怎么用
  • • 第3篇:数据读取与写入——read_csvread_excelto_csv,搞定文件I/O

基础篇(第4-6篇):理解你的数据

  • • 第4篇:数据探索——.info().describe().value_counts(),三招看清数据面貌
  • • 第5篇:缺失值处理(上)——缺失值是怎么来的,.isnull() 排查,删除法 .dropna()
  • • 第6篇:缺失值处理(下)——填充法 .fillna(),均值、中位数、众数、前后值、插值

转换篇(第7-9篇):修整数据形态

  • • 第7篇:数据类型转换——astype()pd.to_numeric()pd.to_datetime(),让每列各归其位
  • • 第8篇:字符串处理——.str 访问器的全套方法:拆分、替换、提取、正则匹配
  • • 第9篇:筛选与排序——布尔索引、query()loc/ilocsort_values,精准定位数据

进阶篇(第10-12篇):数据工程思维

  • • 第10篇:数据合并——concatmergejoin,打通多张表
  • • 第11篇:分组聚合与数据透视——groupbypivot_tablemelt,从明细到汇总
  • • 第12篇(本文):清洗流水线 + 系列总结——pipe() 串联,从单步操作到自动化工程
阶段
核心能力
标志性函数
入门
会用Python读数据
pd.read_csv()
基础
能看懂数据长什么样
.info()
.describe()
转换
能把数据"修"好
.fillna()
.astype().str
进阶
能设计自动化流程
.merge()
.groupby().pipe()

七、接下来学什么?

数据清洗是数据分析的前80%。掌握了这12篇的内容,你已经可以处理工作中绝大多数"脏数据"了。下一步的建议路线:

  1. 1. 数据可视化:matplotlib 和 seaborn——让数据"开口说话"
  2. 2. 统计分析入门:T检验、卡方检验、相关分析、线性回归
  3. 3. 时间序列分析:趋势、季节性、预测
  4. 4. 实战项目:找一份公开数据集(Kaggle、国家统计局),完整走一遍"清洗 → 探索 → 可视化 → 建模"流程
  5. 5. 进阶工具:掌握 scikit-learn 做机器学习,或 openpyxl 做自动化报表

学习数据分析最好的方式永远是做项目。找一个你真正感兴趣的问题,用真实数据去回答它。


最后的话

12篇文章,从 import pandas as pd 到构建完整的数据清洗流水线。

如果你是从第一篇一路跟下来的——恭喜你,你已经比大多数只会在 Excel 里手动点来点去的人领先了一大步。

数据分析这条路,入门不难,但要"会用"和"用得好"之间有一条很长的路。这12篇是你的起跑线,不是终点线。

记住两句话:

  1. 1. 脏数据是常态,干净数据是奢侈品。 不要因为数据"丑"就放弃分析。
  2. 2. 代码要能解释给自己6个月后的自己看。 写函数、写注释、写日志——未来的你会感谢现在的你。

感谢阅读。愿你的数据永远干净,bug永远好找。


这是"从零开始学Python数据清洗"系列的终章。如果你觉得这12篇对你有帮助,请点赞、在看、收藏,并转发给和你一样在学数据分析的朋友。有任何问题,留言区见。

#数据清洗 #pipe #自动化 #pipeline #Python数据分析 #工作手册

系列全部文章已整理为合辑,后台回复「Python清洗」获取完整目录。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 03:10:39 HTTP/2.0 GET : https://f.mffb.com.cn/a/499583.html
  2. 运行时间 : 0.175244s [ 吞吐率:5.71req/s ] 内存消耗:4,852.24kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=dfbec6ff1deae67884074cb9e43a81eb
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000559s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000872s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000468s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000616s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000652s ]
  6. SELECT * FROM `set` [ RunTime:0.008438s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000942s ]
  8. SELECT * FROM `article` WHERE `id` = 499583 LIMIT 1 [ RunTime:0.004461s ]
  9. UPDATE `article` SET `lasttime` = 1783105839 WHERE `id` = 499583 [ RunTime:0.015325s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000372s ]
  11. SELECT * FROM `article` WHERE `id` < 499583 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005777s ]
  12. SELECT * FROM `article` WHERE `id` > 499583 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002377s ]
  13. SELECT * FROM `article` WHERE `id` < 499583 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016143s ]
  14. SELECT * FROM `article` WHERE `id` < 499583 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.034494s ]
  15. SELECT * FROM `article` WHERE `id` < 499583 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.014970s ]
0.176831s