看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在真实业务中,我们经常会接触到“半结构化”的日志文件,例如网站访问日志、接口调用记录、系统异常日志等。
这些数据虽然格式混乱,但包含了极具价值的信息:时间、用户、操作、状态……
要想高效地从这类文本数据中提取结构化信息并分析规律,pandas 提供了一整套强大的工具。
本篇文章将结合三个常用方法完成一个真实的日志分析任务:
str.extract() —— 从字符串中提取结构化信息to_datetime() —— 将时间字段转换为真正的日期时间类型value_counts() —— 统计事件分布频率通过这个案例,你将学会从“纯文本日志”一步步提取出可分析的数据表。
我们有一份简化的访问日志数据,记录了用户访问时间、用户名和访问的页面。
示例数据如下(使用字符串读取):
import pandas as pd
from io import StringIO
log_data = StringIO("""
[2024-11-05 09:15:32] user: alice visited /home
[2024-11-05 09:18:01] user: bob visited /products
[2024-11-05 09:19:55] user: alice visited /products
[2024-11-05 09:20:10] user: charlie visited /home
[2024-11-05 09:25:42] user: bob visited /checkout
[2024-11-05 09:28:15] user: alice visited /checkout
[2024-11-05 09:35:00] user: charlie visited /products
""")
df = pd.read_csv(log_data, header=None, names=["raw"])
需求描述:
我们要从这份原始日志中提取出三个字段:
timestamp:访问时间user:用户名page:访问页面然后完成以下分析任务:
datetime 类型,以便后续做时间分析。提取字段:
使用 str.extract() 结合正则表达式,从原始日志中提取时间、用户名和页面。
时间类型转换:
用 to_datetime() 将时间字符串转成可计算的时间类型。
访问统计:
使用 value_counts() 统计用户访问次数、页面访问量。
结果可视化/排序展示:
对结果排序输出,方便直观查看。
代码如下:
# 提取时间、用户和页面
parsed = (
df['raw']
.str.extract(r'\[(?P<timestamp>.*?)\]\s+user:\s+(?P<user>\w+)\s+visited\s+(?P<page>\S+)')
)
# 转换时间类型
parsed['timestamp'] = pd.to_datetime(parsed['timestamp'])
# 统计每个用户访问次数
user_visits = parsed['user'].value_counts().reset_index()
user_visits.columns = ['user', 'visit_count']
# 统计每个页面访问次数
page_visits = parsed['page'].value_counts().reset_index()
page_visits.columns = ['page', 'visit_count']
print("用户访问次数:")
print(user_visits)
print("\n页面访问次数:")
print(page_visits)
输出结果:
用户访问次数:
user visit_count
0 alice 3
1 bob 2
2 charlie 2
页面访问次数:
page visit_count
0 /products 3
1 /home 2
2 /checkout 2
代码分析:
str.extract():用命名捕获组 (?P<字段名>...) 一步提取出多个字段,得到结构化 DataFrame。to_datetime():将字符串转换为真正的时间类型,为后续时间序列分析(如按小时聚合)打好基础。value_counts():快速统计分布频率,是探索性分析最常用的方法之一。整个过程从“原始日志文本”变成了“可分析表格”,让日志分析轻松高效。
这种场景非常典型,常见于:
(完)
更新时间:2025-11-10 18:07:35 标签:pandas python 日志数据 清洗 分析