如何使用Pandas读取含异常分隔符的CSV并生成目标DataFrame
处理分号分隔CSV的列数不匹配问题,生成目标DataFrame
针对CSV表头列数与数据行不一致的问题,以下是两种基于Pandas的解决方案,能精准生成你需要的DataFrame结构:
方法一:逐行读取并处理
逻辑直观,可精准控制每一行的拆分与合并:
import pandas as pd # 读取文件所有行 with open('data.csv', 'r', encoding='utf-8') as f: lines = f.read().splitlines() # 提取表头 headers = lines[0].strip().split(';') # 处理每一行数据 processed_data = [] for line in lines[1:]: parts = line.strip().split(';') # 根据拆分后的长度判断是否需要合并列 if len(parts) == 5: processed_row = [parts[0], f"{parts[1]};{parts[2]}", parts[3], parts[4]] else: processed_row = parts processed_data.append(processed_row) # 生成目标DataFrame df = pd.DataFrame(processed_data, columns=headers)
方法二:临时读取后合并列
无需手动逐行循环,利用Pandas的行处理能力实现:
import pandas as pd # 读取表头 headers = pd.read_csv('data.csv', sep=';', nrows=0).columns.tolist() # 读取所有数据行(跳过表头,避免列数不匹配报错) temp_df = pd.read_csv('data.csv', sep=';', header=None, skiprows=1) # 定义行处理逻辑 def process_row(row): if len(row) >= 5: return pd.Series([row[0], f"{row[1]};{row[2]}", row[3], row[4]]) else: return pd.Series(row[:4]) # 生成目标DataFrame df = temp_df.apply(process_row, axis=1) df.columns = headers
执行后得到的DataFrame结构如下:
col1 col2 col3 col4 0 4 hello;world 1 1 1 4 hi 1 1 2 4 hi 1 1 3 4 hi 1 1
内容的提问来源于stack exchange,提问作者Duccio Borchi
相关产品推荐
相关产品推荐

