You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame列值相减仅返回NaN问题排查求助

问题排查与解决

核心问题分析

  • 行数不匹配导致合并后出现NaN:使用pd.concat(axis=1)按列合并时,若各个DataFrame的行数不一致,行数较少的DataFrame对应的行会被填充为NaN。后续对包含NaN的列做减法,结果自然全是NaN。
  • 文件读写路径/名称不匹配:你保存的文件是merge27-31.csv,但读取的却是C:\\Users\\finalmerge27-31.csv,路径和文件名都不对应,大概率读取了错误的文件,导致列数据异常。
  • 不必要的reset_index操作:该操作会新增一列索引,对列间减法无帮助,反而可能引入额外干扰。

修正后的代码

import pandas as pd
import numpy as np

# 读取所有文件,注意路径格式(Windows用/或\\)
df27 = pd.read_csv('D:/27.txt', names=['No27','X27','Y27','Z27','Date27','Time27'], sep='\s+')
df28 = pd.read_csv('D:/28.txt', names=['No28','X28','Y28','Z28','Date28','Time28'], sep='\s+')
df29 = pd.read_csv('D:/29.txt', names=['No29','X29','Y29','Z29','Date29','Time29'], sep='\s+')
df30 = pd.read_csv('D:/30.txt', names=['No30','X30','Y30','Z30','Date30','Time30'], sep='\s+')
df31 = pd.read_csv('D:/31.txt', names=['No31','X31','Y31','Z31','Date31','Time31'], sep='\s+')

# 先检查所有文件的行数是否一致,这是按列合并的前提
print("各文件行数:")
print(f"df27: {len(df27)}, df28: {len(df28)}, df29: {len(df29)}, df30: {len(df30)}, df31: {len(df31)}")

# 确认行数一致后执行合并
total = pd.concat([df27, df28, df29, df30, df31], axis=1)

# 直接在合并后的DataFrame上计算差值,无需重复读写文件
total['X31-X27'] = total['X31'] - total['X27']
total['Y31-Y27'] = total['Y31'] - total['Y27']
total['Z31-Z27'] = total['Z31'] - total['Z27']

# 查看计算结果
print(total[['X31', 'X27', 'X31-X27', 'Y31', 'Y27', 'Y31-Y27', 'Z31', 'Z27', 'Z31-Z27']])

# 若需保存文件,指定正确路径
total.to_csv('D:/merge27-31.csv', index=False)

额外注意事项

  • 确保所有输入的txt文件每行数据是一一对应的(比如第1行都是同一测点的不同日期数据),否则按列合并没有意义,需要考虑按No列作为主键进行merge操作。
  • 若必须保存后再读取,务必保证保存和读取的路径、文件名完全一致。
  • 如果检查行数后发现不一致,需要先核对原始数据,确认是数据缺失还是读取参数错误(比如分隔符、表头设置)。

内容的提问来源于stack exchange,提问作者Aqib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:15:34