【发布时间】:2019-11-05 15:10:49
【问题描述】:
这个问题可能听起来完全愚蠢,但由于我对此类问题的经验为 0,所以我相信这可能值得一试。
我面临的情况是我有多个函数,每个函数调用一个数据帧,然后再创建几个数据帧来执行一些操作。是的,我也许可以使用 OOP,但我认为这不会使我的具体情况更具可读性。
下面的代码是我制作的一个示例,可以将我的意思可视化,它除了说明问题之外没有任何目的。当然,我面临的情况更复杂,涉及更多的数据帧,这就是为什么将变量分配给每个分区数据帧并将其用作函数的参数不是一种选择。
dfdata = pd.DataFrame({'Column A': [300,300,450,500,500,750,600,300, 150],'Column B': [1,1,0,1,0,1,0,0,1],'Column C': ['R','C','R','C','Q','C','R','Z','Z']})
def foo1(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_x = df_1['Column B']*2
return df_x
def foo2(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_y = df_0['Column B']*2
return df_y
def foo3(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_z = df_1['Column B']*3
return df_z
所以,总而言之,有什么想法可以在不应用 OOP 的情况下让事情变得更少重复和更智能?
【问题讨论】:
-
为什么不想应用 OOP?
-
您的代码没有多大意义。由于您的
df_1的构造,它的Column B在每一行(在您的每个foo函数中)始终只包含1。因此,df_1['Column B']*3有点过于复杂了。此外,foo1()和foo2()是相等的。所以很可能,你的代码有问题,根本没有做你想做的事。你能描述一下你真正想在你的函数中实现什么吗? -
@jonathan.scholbach 是的,这确实很奇怪。正如我在这里提到的那样:“下面的代码是我制作的一个示例,可以很有趣地可视化我的意思,它除了说明问题之外没有任何其他目的。”
标签: python dry readability code-organization