我有一个需要几个参数的函数。参数之一是指数据帧。现在,我想将此参数既用作数据框(我很容易就能做到)又用作字符串(我只是无法做到)。用字符串表示,我想将数据帧的名称用作字符串。
def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
code...
...
...
return output
result = get_avg_spectrum(full_signal = acc_x_g, fs = 5000, skip_samples = 0,...)
在此,“ acc_x_g”是指熊猫系列。所以我要使用整个系列以及文本“ acc_x_g”。
# the below doesn't work
full_signal.name
Out[104]: 'ACC'
# ACC is the name of the variable in the Pandas Series "acc_x_g"
我有很多文章要运行此函数,因此,想法是简单地在函数中不断更改“ full_signal = xxx”参数。有人可以帮忙吗?
答案 0 :(得分:0)
基于this answer(和一些测试),这听起来不可能(在您的示例中,链接的答案中的代码返回[“ full_spectrum”]作为名称,而不是所需的[“ acc_x_g” ])。
但是,一种可能性是传递带有名称而不是对象的字符串。我不确定您的代码的确切设置方式,但是类似的方法会起作用。
def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
name = full_signal
df = eval(full_signal)
...
return(output)
result = get_avg_spectrum(full_signal = "acc_x_g", fs = 5000, skip_samples = 0,...)
编辑:如有必要,您可能可以将这两者结合起来(链接的答案以及我在上面发布的内容)。同样,这取决于对象的创建方式等。但是,创建一些对象,将其循环以获取其名称,然后将名称传递给函数...这很麻烦,但是可以使用。
答案 1 :(得分:0)
鉴于其他回应的评论,还有另一种方式。
创建一个字典,其中键是名称,而对象是值(可以根据链接使用inspect
自动执行)。然后匹配value == test_value
。
显而易见的选择是将键简单地传递给函数,然后让函数调用字典:
mydict = {"acc_x_g": acc_x_g}
def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
df = mydict[full_signal]
...
return(output)
result = get_avg_spectrum(full_signal = "acc_x_g", fs = 5000, skip_samples = 0,...)
但是根据您的代码,您可能需要按照先前/自动确定的特定顺序遍历光谱。如果是这种情况(顺序很重要),并且您无法生成该顺序的列表,我将保留以下解决方案。但是要小心!假设您的所有pd.Series
都是唯一!
mydict = {"acc_x_g": acc_x_g}
def get_avg_spectrum(full_signal, fs, skip_samples = 0,...):
name = ""
for k,v in mydict.items():
if v.all() == full_signal.all():
name = k
...
return(output)
result = get_avg_spectrum(full_signal = acc_x_g, fs = 5000, skip_samples = 0,...)