如何用Pandas读取特殊格式CSV并转换为指定结构DataFrame?
处理特殊格式CSV并转换为指定结构DataFrame的方法
问题描述
我需要读取一种特殊格式的CSV文件,其内容结构如下:
1 file, 13 insertions, 23 deletions 1 file, 43 deletions 2 file, 7 insertions 4 file, 13 insertions, 45 deletions希望将其转换为如下结构的DataFrame:
file insertions deletions 1 13 23 1 0 43 2 7 0 4 13 45
解决方案
以下提供两种基于Python pandas库的实现方式,可按需选择:
方法1:逐行解析(直观易懂)
逐行读取文件内容,拆分字段后提取数值,缺失字段自动填充0:
import pandas as pd data_rows = [] # 替换为你的CSV文件实际路径 with open('target_file.csv', 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 按逗号拆分并去除每个片段的首尾空格 segments = [seg.strip() for seg in line.split(',')] # 提取文件数量 file_count = int(segments[0].split()[0]) inserts = 0 deletes = 0 # 遍历剩余片段,提取插入/删除数值 for seg in segments[1:]: num, tag = seg.split() num = int(num) if tag == 'insertions': inserts = num elif tag == 'deletions': deletes = num data_rows.append({ 'file': file_count, 'insertions': inserts, 'deletions': deletes }) # 生成目标DataFrame result_df = pd.DataFrame(data_rows) print(result_df)
方法2:正则表达式提取(简洁高效)
利用正则表达式一次性匹配所有字段,自动处理缺失值:
import pandas as pd # 读取原始文件,不指定表头 raw_df = pd.read_csv('target_file.csv', header=None, names=['raw_content'], encoding='utf-8') # 正则规则:捕获file、insertions、deletions的数值,缺失项返回空值 pattern = r'(?P<file>\d+) file(?:, (?P<insertions>\d+) insertions)?(?:, (?P<deletions>\d+) deletions)?' result_df = raw_df['raw_content'].str.extract(pattern) # 转换为整数类型,空值填充0 result_df = result_df.apply(pd.to_numeric).fillna(0).astype(int) print(result_df)
两种方法最终都会输出符合要求的DataFrame,可根据文件规模和个人习惯选择使用。
内容的提问来源于stack exchange,提问作者Sirdrakeistda
相关产品推荐
相关产品推荐

