pandas - 如果使用一个或多个参数,如何传递函数参数
问题描述
预先感谢您的协助。
#Create df.
import pandas as pd
d = {'dep_var' : pd.Series([10, 20, 30, 40], index =['a', 'b', 'c', 'd']),
'one' : pd.Series([9, 23, 37, 41], index =['a', 'b', 'c', 'd']),
'two' : pd.Series([1, 6, 5, 4], index =['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
dep_var one two
a 10 9 1
b 20 23 6
c 30 37 5
d 40 41 4
#Define function.
def df_two(dep_var, ind_var_1, ind_var_2):
global two
data = {
dep_var: df[dep_var],
ind_var_1: df[ind_var_1],
ind_var_2: df[ind_var_2]
}
two = pd.DataFrame(data)
return two
# Execute function.
df_two("dep_var", "one", "two")
dep_var one two
a 10 9 1
b 20 23 6
c 30 37 5
d 40 41 4
完美运行。我想,在这方面相当新,能够在使用三个或四个参数时使用单个函数,当然,使用上面的代码我会收到带有第三个参数的错误消息。
所以菜鸟之举我用 3 个参数定义了另一个函数。
def df_three(dep_var, ind_var_1, ind_var_2, ind_var_3):
global three
data = {
dep_var: df[dep_var],
ind_var_1: df[ind_var_1],
ind_var_2: df[ind_var_2],
ind_var_3: df[ind_var_2]
}
three = pd.DataFrame(data)
return three
我试过 *args、*kargs、映射和许多东西,但都没有运气。我的感觉是我很接近,但需要一种方法来告诉函数有时可能有一个、两个或三个参数,然后将一个、两个或三个参数映射到创建的数据帧。
解决方案
听起来您只想按特定顺序从数据框中选择一些列。您可以为此传递列名列表:
two[["dep_var", "one", "two"]]
如果你愿意,你可以将它打包到一个函数中,使用元组解包来获得可变数量的参数。
def select(df, *columns):
return df[list(columns)]
这应该直接适用于您的用例:
select(two, "dep_var", "one", "two")
select(three, "dep_var", "one", "two", "three")
请注意,我还传递了数据框变量,因此您不需要依赖全局变量。
需要调用 to list
,因为元组解包会产生一个元组。并且使用元组作为数据框的索引会产生与使用列表不同的结果。
您可能希望将 a 添加.copy()
到返回行,具体取决于您如何使用 this 的返回值。
可变数量的参数也包括零,因此您可能需要为此添加检查。
推荐阅读
- python - 如何解决错误:zip 参数 #2 必须支持 Python 中的迭代
- java - 无法多次检索 PDF 文档
- trace32 - 如果我们从 ELF 文件中给出符号表和字符串表部分,t32 读取符号
- python - 如何为具有相同第一行值的每个第二行值快速处理 2xN 列表/nparray?
- css - 如何在 CSS 中添加项目符号行?
- awk - awk - 在多个文件中查找第 1 列中的字符串并将其替换为第 2 列中的字符串
- reactjs - 为什么我的图像不使用网格显示?
- chart.js - 如何获取指定图表项索引处的 X 位置?
- python - 如何避免代码重复以有效使用while循环?
- json - pyspark:执行collect_list()时如何从列值中删除转义字符?