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

Pandas DataFrame函数调用异常:仅首列计算结果有效问题咨询

解决Pandas调用自定义函数仅第一行得到结果的问题

我一眼就看出问题所在了——你从df2里提取的G和H是Pandas Series对象,不是单个的标量值,这导致函数运算时发生了索引对齐问题,只有索引匹配的第一行能得到有效结果,其他行因为索引不匹配变成了NaN。

问题根源

当你执行G=df2['a']和H=df2['b']时,得到的是长度为1的Series:

print(type(G))  # <class 'pandas.core.series.Series'>

而df1的列是长度为5的Series,两者运算时Pandas会按索引对齐。df2的索引只有0,所以只有df1中索引为0的行能和G、H匹配计算,其他行因为没有对应索引,结果就变成了缺失值。

修复方案

把G和H转换成标量值即可,有几种简单的方法:

  • 使用.iloc[0]提取第一个元素:
G = df2['a'].iloc[0]
H = df2['b'].iloc[0]
  • 使用.item()方法(适用于单个元素的Series):
G = df2['a'].item()
H = df2['b'].item()
  • 使用.values[0]提取底层数组的第一个元素:
G = df2['a'].values[0]
H = df2['b'].values[0]

修复后的完整代码

import pandas as pd
import numpy as np

def mmInch(x):
    return(x/25.4)
def Inchmm(x):
    return(x*25.4)
def PsiBarg(x):
    return(x/14.5)
def MB31G(L,W,T,S,D,P):
    Z=(mmInch(L))**2/(D*(mmInch(T)))
    M=np.where(Z>50,0.032*0.032*Z+3.3,(1+0.6275*Z-0.003375*Z**2)**(1/2))
    F=P*((1-0.85*W)/(1-0.85*W/M))
    I=2*F*mmInch(T)/D
    return(PsiBarg(I*S))

raw_data = {'L': [2,4,5,6,4], 'W':[0.1,0.12,0.15,0.3,0.4],'T': [12,12,12,15,15], 'S':[0.72,0.72,0.72,0.5,0.5]}
df1 = pd.DataFrame(raw_data, columns = ['L', 'W', 'T', 'S',])
df2 = pd.DataFrame({'a':[28], 'b': [75000]})

# 提取标量值
G = df2['a'].iloc[0]
H = df2['b'].iloc[0]

df1['Result']=MB31G(df1['L'],df1['W'],df1['T'],df1['S'],G,H)
print(df1)

这样运行后,df1['Result']的所有行都会得到正确的计算结果,而不只是第一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:04:53