Python 3.6传入DataFrame报'Missing 1 Required Keyword-Only Argument'错误排查
解决Python 3.6中传入DataFrame时的"Missing 1 Required Keyword-Only Argument"错误
这个问题我之前也碰到过!核心原因大概率是你的函数定义里用了仅关键字参数(Python 3+的特性),但调用的时候没按照要求用关键字传递参数。下面给你拆解问题和解决办法:
常见错误场景分析
1. 函数定义包含*分隔的仅关键字参数
如果你的函数定义是类似这样的:
def your_function(df, *, rel_change): # 函数内部逻辑,比如处理df和rel_change pass
这里的*是一个分隔符,它后面的rel_change就是仅关键字参数——意思是调用这个函数时,rel_change必须通过rel_change=值的方式传递,不能用位置参数传递。
如果你调用时写成了:
your_function(my_dataframe, my_rel_change_array)
就会触发你遇到的错误,因为Python会把my_rel_change_array当成位置参数,但函数在df之后没有定义位置参数,只要求关键字参数rel_change。
2. 多仅关键字参数的传递问题
哪怕你拆分了逻辑(比如单独计算row_count传入mu),如果mu也是仅关键字参数,同样会报错。比如函数定义:
def calculate_value(df, *, rel_change, mu): return len(df) * mu + sum(rel_change)
错误调用:
row_count = len(my_dataframe) calculate_value(my_dataframe, my_rel_change_array, row_count)
正确调用必须给rel_change和mu都加上关键字:
calculate_value(my_dataframe, rel_change=my_rel_change_array, mu=row_count)
快速排查步骤
- 打开你的函数定义代码,找有没有
*符号——它后面的所有参数都是仅关键字参数。 - 检查函数调用语句,确保这些参数都用
参数名=值的格式传递,而不是直接放值。 - 如果不需要仅关键字参数的限制,可以把函数定义里的
*去掉,这样参数就可以用位置传递了(但如果是刻意设计的参数规范,不建议这么做)。
举个完整的正确示例:
import pandas as pd import numpy as np # 定义包含仅关键字参数的函数 def process_data(df, *, rel_change, mu): row_count = df.shape[0] result = row_count * mu + np.mean(rel_change) return result # 准备数据 my_df = pd.DataFrame({'A': [1, 2, 3, 4]}) rel_arr = np.array([0.05, 0.1, 0.15]) row_count = my_df.shape[0] # 正确调用:用关键字传递仅关键字参数 output = process_data(my_df, rel_change=rel_arr, mu=row_count) print(output)
内容的提问来源于stack exchange,提问作者amita00
相关产品推荐
相关产品推荐

