使用Pandas解析CSV首行生成过滤值时得到空DataFrame的问题排查
CSV数据提取问题:空DataFrame原因及解决
问题背景
有一个CSV文件,首行内容如下:
Pyscip_V1.11 Ref: #001=XYZ_0[1234] #50=M3_0[112] #51=M3_1[154] #52=M3_2[254]...
需要提取三列数据:
Ref:#后的数值(如001、50)ID:=后的标识(如XYZ_0、M3_0)Num:方括号内的数值(如1234、112)
编写的代码运行后得到空DataFrame,代码如下:
import re import pandas as pd header_pattern = r'Pyscip_V(\d+\.\d+) Ref:' version_match = re.search(header_pattern, first_line.iloc[0, 0]) version_number = version_match.group(1) if version_match else '' matches = re.findall(r'#(\d+)=(\w+_\d)\[([\d]+)\]', first_line.iloc[0, 0]) parsed_df = [] for match in matches: row_dict = { 'Ref': match[0] if match[0] else '', 'ID': match[1] if match[1] else '', 'Ser_No': match[2] if match[2] else '' } parsed_df.append(row_dict) new_df = pd.DataFrame(parsed_df)
补充:CSV第三行数据为:
ID Date XYZ_0 M3_0 M3_1 M3_2
1 22.12.2023 12.6 0.5 1.2 2.3
期望输出:
Ref ID Num 001 XYZ_0 1234 50 M3_0 112 51 M3_1 154
问题原因
空DataFrame由两个核心问题导致:
- CSV读取方式错误:若未指定
header=None,Pandas会将首行(Pyscip_V...)自动识别为列名,而非数据行,导致first_line.iloc[0,0]并非目标处理内容,正则无法匹配。 - 正则表达式限制过严:
(\w+_\d)强制ID为「字母数字+下划线+单个数字」,若ID格式稍有变化(比如后缀是多位数字)就会匹配失败;更可靠的方式是匹配=和[之间的所有非特殊字符。
另外,代码中列名用了Ser_No,与期望的Num不一致,但这不是空DataFrame的原因。
解决步骤
1. 正确读取CSV
使用header=None参数,保留首行作为数据行:
df = pd.read_csv("your_file.csv", header=None) first_line = df.iloc[0, 0]
2. 修正正则表达式
将ID的匹配模式改为([^=\[]+),匹配=和[之间的所有有效字符,避免格式限制:
matches = re.findall(r'#(\d+)=([^=\[]+)\[(\d+)\]', first_line)
3. 统一列名
将字典中的Ser_No改为Num,与期望输出一致。
完整修正代码
import re import pandas as pd # 读取CSV,不将第一行设为表头 df = pd.read_csv("your_file.csv", header=None) first_line = df.iloc[0, 0] # 提取版本号(可选操作) header_pattern = r'Pyscip_V(\d+\.\d+) Ref:' version_match = re.search(header_pattern, first_line) version_number = version_match.group(1) if version_match else '' # 匹配目标数据 matches = re.findall(r'#(\d+)=([^=\[]+)\[(\d+)\]', first_line) # 构造结果DataFrame parsed_data = [{'Ref': m[0], 'ID': m[1], 'Num': m[2]} for m in matches] new_df = pd.DataFrame(parsed_data) # 打印结果 print(new_df)
运行结果
Ref ID Num 0 001 XYZ_0 1234 1 50 M3_0 112 2 51 M3_1 154 3 52 M3_2 254
内容的提问来源于stack exchange,提问作者dnem
相关产品推荐
相关产品推荐

