DataFrame保存后未垂直堆叠的故障原因及修复方法
Pandas合并dat文件格式错乱的故障原因与修复方案
故障核心原因
- 数据读取参数错误:.dat文件通常采用空格、制表符作为分隔符,若使用
pd.read_csv()默认的逗号分隔符读取,会导致列识别错误,DataFrame结构异常,合并后输出格式混乱。 - 列结构不匹配:两个源文件的列名、列数不一致时,
pd.concat()垂直堆叠会产生NaN值,保存后出现错位、格式错乱。 - 保存参数不合理:默认
to_csv()会输出索引列,且未指定与源文件一致的分隔符,导致输出文本格式与预期不符。
分步修复方案
1. 正确读取.dat文件
根据源文件的分隔类型,指定sep参数:
- 空格分隔(含多空格):
import pandas as pd # 匹配任意数量的空格作为分隔符 df1 = pd.read_csv("data1.dat", sep=r"\s+") df2 = pd.read_csv("data2.dat", sep=r"\s+")
- 制表符分隔:
df1 = pd.read_csv("data1.dat", sep="\t") df2 = pd.read_csv("data2.dat", sep="\t")
若源文件无表头,需手动指定列名:
cols = ["col1", "col2", "col3"] # 替换为实际列名 df1 = pd.read_csv("data1.dat", sep=r"\s+", header=None, names=cols) df2 = pd.read_csv("data2.dat", sep=r"\s+", header=None, names=cols)
2. 对齐列结构后合并
合并前先验证列一致性:
print("data1列结构:", df1.columns.tolist()) print("data2列结构:", df2.columns.tolist())
若列名不一致,统一列名后再执行合并,并重置索引避免重复:
# 统一df2列名与df1一致 df2.columns = df1.columns # 垂直堆叠并重置索引 merged_df = pd.concat([df1, df2], axis=0, ignore_index=True)
3. 按预期格式保存文件
保存时关闭索引,并指定与源文件一致的分隔符:
# 制表符分隔示例,无索引输出 merged_df.to_csv("merged.dat", sep="\t", index=False) # 空格分隔示例 merged_df.to_csv("merged.dat", sep=" ", index=False)
验证示例
假设源文件内容:
data1.dat:
col1 col2 col3
1 2 3
4 5 6
data2.dat:
col1 col2 col3
7 8 9
10 11 12
执行修复代码后,merged.dat会正确垂直堆叠为:
col1 col2 col3
1 2 3
4 5 6
7 8 9
10 11 12
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

