如何拼接Pandas DataFrame指定列并解决read_csv读取行列不均报错
解决方案
报错原因
pd.read_csv默认以第一行的字段数作为全局预期字段数,后续行字段数超过第一行时就会触发字段数不匹配的解析错误。
实现步骤
第一步:无报错读取不定列数文件
先手动统计文件所有行的最大字段数,再指定列名读取,避免解析报错:
import pandas as pd import numpy as np filename = "你的目标文件路径.txt" # 统计所有行的最大字段数 max_col_num = 0 with open(filename, 'r', encoding='utf-8') as f: for line in f: current_cols = len([item for item in line.strip().split() if item]) if current_cols > max_col_num: max_col_num = current_cols # 按最大列数生成自定义列名 col_list = [f"col_{i}" for i in range(max_col_num)] # 读取文件,指定列名即可兼容不同列数的行 df = pd.read_csv(filename, sep='\s+', header=None, names=col_list)
第二步:指定列拼接生成新列
不需要循环遍历列,直接用pandas内置的按行聚合方法实现,代码更简洁高效:
# 示例1:拼接所有列生成新列testColumn df['testColumn'] = df.fillna('').astype(str).agg(' '.join, axis=1).str.strip() # 示例2:仅拼接指定列(比如列索引为1、2、3的三列) # df['testColumn'] = df[['col_1', 'col_2', 'col_3']].fillna('').astype(str).agg(' '.join, axis=1).str.strip() # 示例3:拼接指定索引范围的列(比如列索引>=2的所有后续列) # df['testColumn'] = df.iloc[:, 2:].fillna('').astype(str).agg(' '.join, axis=1).str.strip()
代码说明:
fillna('')将空值替换为空字符串,避免拼接时出现nan字符串astype(str)将所有列统一转为字符串类型agg(' '.join, axis=1)按行对选中列用空格拼接str.strip()去掉拼接后首尾多余的空格
内容的提问来源于stack exchange,提问作者Sonicflash01
相关产品推荐
相关产品推荐

