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
相关产品推荐
相关产品推荐

