You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas解析csv日志提取DATA、TYPE字段缺失值填充问题

问题解答

1. TYPE字段默认值填充逻辑修复

原代码逻辑不生效的核心原因是:df['_raw'].str.contains('<TYPE>')返回的是和DataFrame行数一致的布尔值序列,不是单个全局布尔值,不能直接放在普通if语句中做判断。
修复方式非常简单,str.extract未匹配到内容时会返回NaN,直接用fillna方法给空值填充默认值即可:

# 提取TYPE字段后直接填充空值为321
df['TYPE'] = df['_raw'].str.extract('<TYPE>(.*)</TYPE>', expand=True).fillna('321')

如果你确实需要基于是否包含标签的逻辑判断,也可以用pandas向量化判断方法np.where实现:

import numpy as np
df['TYPE'] = np.where(
    df['_raw'].str.contains('<TYPE>', na=False),
    df['_raw'].str.extract('<TYPE>(.*)</TYPE>', expand=True),
    '321'
)

2. 将DATA标签内容存入变量的实现方案

根据使用场景可以选择不同的实现方式:

  • 提取所有行的DATA内容为列表:
data_list = df['DATA'].tolist()
  • 提取指定索引(比如第0行)的DATA内容为单个变量:
single_data = df['DATA'].iloc[0]
  • 按条件过滤后提取对应DATA内容(比如提取_time为23.07.2021 10:10:16对应的DATA):
target_data = df[df.index == '23.07.2021  10:10:16']['DATA'].values[0]

完整可运行代码

import pandas as pd

# 读取csv时直接保留需要的列,不用重复建DataFrame
df = pd.read_csv('test.csv', usecols=['_time', '_raw'], index_col="_time")

# 提取字段
df['DATA'] = df['_raw'].str.extract('<DATA>(.*)</DATA>', expand=True)
df['TYPE'] = df['_raw'].str.extract('<TYPE>(.*)</TYPE>', expand=True).fillna('321')

# 输出结果
print(df[['DATA', 'TYPE']].head(10))

内容的提问来源于stack exchange,提问作者vloubes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 13:03:04