Pandas数据集拼接截断后数值与科学计数格式异常求助
pandas拼接截断数据集后数值异常、显示格式变化的修复方案
问题原因梳理
- 数值异常的常见诱因:
- 多份待拼接数据集(data1~data6)的列名、列顺序、数据类型不一致,
pd.concat默认按列名自动对齐,会出现列错位、补空值的问题,导致数值不符合预期 - 生成单份数据集时没有固定随机种子,每批次生成的data1~data6本身就是完全随机的,拼接后自然和单份数据的规律不匹配
- 截断时使用了普通切片触发链式索引,底层数据赋值异常
- 多份待拼接数据集(data1~data6)的列名、列顺序、数据类型不一致,
- 显示格式变化的原因:
pandas会根据全局数据集的数值范围、离散程度自动选择浮点数显示格式,多份数据拼接后整体数值分布变化,就会从科学计数法切换为普通小数显示,属于默认显示规则的正常表现,不影响底层实际数值。
修复步骤
步骤1:固定随机种子保证数据集生成可复现
在所有生成代码的最开头加入随机种子固定逻辑,确保每批次生成的单份数据完全一致:
import random import numpy as np import pandas as pd random.seed(42) np.random.seed(42)
步骤2:拼接前校验多份数据集的一致性
拼接前校验所有待拼接数据集的列信息完全匹配,避免列错位:
# 以data1为基准校验其余数据集 ref_cols = data1.columns.tolist() ref_dtypes = data1.dtypes.tolist() for idx, df in enumerate([data2, data3, data4, data5, data6]): assert df.columns.tolist() == ref_cols, f"data{idx+2}列名与基准不匹配" assert df.dtypes.tolist() == ref_dtypes, f"data{idx+2}数据类型与基准不匹配"
步骤3:优化拼接、截断逻辑
拼接时关闭自动排序、显式忽略原有索引,截断时用iloc显式定位并拷贝数据,避免链式索引异常:
w_tendon = pd.concat([data1, data2, data3, data4, data5, data6], ignore_index=True, sort=False) w_tendon = w_tendon.iloc[:19800000, :].copy()
步骤4:固定浮点数显示格式
手动配置pandas全局显示规则,固定用科学计数法输出:
# 保留6位有效数字的科学计数法显示 pd.set_option('display.float_format', '{:.6e}'.format) # 若需要固定小数显示,可改为 pd.set_option('display.float_format', '{:.6f}'.format)
步骤5:验证数值一致性
完成操作后用数值校验接口确认拼接截断后的数值和原始单份数据一致,排除显示误差干扰:
# 校验data1前100行与拼接后对应位置数值完全一致,允许空值相等 assert np.allclose(w_tendon.iloc[:100], data1.iloc[:100], equal_nan=True)
内容的提问来源于stack exchange,提问作者Kim Yejun
相关产品推荐
相关产品推荐

