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

Python中Pandas DataFrame动态计算函数构建报错求助

需求与问题

我需要实现一个功能:遍历Pandas DataFrame的每一行,将当前行的每个值转换为float类型。若该行存在空值则跳过;若无空值,则对该行单元格数据执行计算(每次调用的计算逻辑不同),最终返回该行计算结果的布尔值,直到遍历完整个DataFrame。

我已经能用内联代码实现该功能,但希望封装成函数来精简主文件的代码量,不过尝试编写的函数出现了报错。

尝试的函数代码及报错

import pandas as pd

d = {'prod_code': ['1', '2', '3', '', '5'],
     'timestamp': ['1672700400', '1672700460', '1672700520', '1672700580', '1672700640'],
     'cost': [43, 45, 46, 41, 48]}

df = pd.DataFrame(d)


def calculation(dataframe, *columns_and_calc):
    data = []
    for index, row in dataframe[columns_and_calc[:-1]].iterrows():
        try:
            row = row.astype(float)
        except ValueError:
            data.append("")
        else:
            if columns_and_calc[-1]:
                data.append(True)
            else:
                data.append(False)


calculation(df, 'timestamp', 'cost', row['cost'] == 43)

报错信息:NameError: name 'row' is not defined. Did you mean: 'pow'?

可行的内联实现代码

visibleShort = False 
for index, row in dataFile_1min.data[['close', 'leadline_1', 'leadline_2', 'cu1', 'cu2', 'timestamp']].iterrows():
    # visibleShort = False 
    try:
        row = row.astype(float)
    except ValueError:
        pass
    else:
        if (row['close'] < row['leadline_1'] and row['close'] < row['leadline_2']) and (row['cu1'] or row['cu2']) and row['timestamp'] != dataFile_1min.data['timestamp'].iloc[-1]: 
            visibleShort = True
    print(visibleShort)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:55:31