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

Pandas DataFrame按行求和异常求助:DatetimeIndex数值计算错误

问题原因与解决方案

看起来你的sum(axis=1)得到错误结果,最可能的原因是你的数据列(0和1)不是数值类型(int/float),而是被解析成了其他类型(比如timedelta64时间差类型,或者object字符串类型),导致pandas无法正确计算数值求和。

从你给出的错误结果来看:第二行的0.48求和后得到0.02,而0.48 / 24 = 0.02——这强烈暗示你的列1是以小时为单位的timedelta类型,pandas在求和时自动将时间差转换为了以天为单位的数值,所以得到了看似错误的结果。

第一步:验证数据类型

先运行以下代码查看每列的数据类型:

print(df.dtypes)

如果输出里列0和列1的类型是timedelta64[ns],那就能确认问题所在;如果是object类型,说明列里可能是字符串格式的数值,没有被正确解析。

第二步:针对性解决

情况1:列是timedelta类型

如果要保留原始数值(比如小时数),可以将timedelta转换为小时数的数值,再求和:

# 将timedelta转换为小时数
df['0'] = df['0'].dt.total_seconds() / 3600
df['1'] = df['1'].dt.total_seconds() / 3600
# 执行按行求和
df['DailyTotal'] = df.sum(axis=1)

情况2:列是object(字符串)类型

如果列里是字符串格式的数值,先转换为float类型再求和:

# 转换为数值类型,无法转换的会变成NaN(和你的示例一致)
df['0'] = pd.to_numeric(df['0'], errors='coerce')
df['1'] = pd.to_numeric(df['1'], errors='coerce')
# 按行求和
df['DailyTotal'] = df.sum(axis=1)

额外建议:明确指定求和列

为了避免不小心包含其他列(比如索引或隐藏列),可以明确指定要求和的列:

df['DailyTotal'] = df[[0, 1]].sum(axis=1)

这样应该就能得到你预期的结果了:第一行0.05 + 0.24 = 0.29,第二到第五行0.48(因为NaN会被自动忽略)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:40:21