为冗长的操作重写变量名称是不是风格不好



我经常发现自己处于这样一种情况:从开始数据输入到想要的输出,我需要执行几个步骤,例如在函数/循环中。为了避免我的行太长,我有时会覆盖在这些操作中使用的变量名。

一个例子是:

df_2 = df_1.loc[(df1['id'] == val)]
df_2 = df_2[['c1','c2']]
df_2 = df_2.merge(df3, left_on='c1', right_on='c1'))

我能想到的唯一替代方案是:

df_2 = df_1.loc[(df1['id'] == val)][['c1','c2']]
    .merge(df3, left_on='c1', right_on='c1'))  

但这些选择都让人感觉不干净。应该如何处理这些情况?

您可以参考这篇文章,它确切地讨论了您的问题。

熊猫核心团队现在鼓励使用"方法链接";。这是一种将多个方法调用到单个语句中。这可以让你通过将结果从一个方法传递到下一个方法,而不是存储使用变量的中间结果。

除了使用括号和缩进(如@perl的答案(来对链接代码进行预处理外,您可能还发现使用.query().assign()等函数对";方法链接";风格

当然,方法链接也有一些缺点,尤其是当过度时:

"过长链的一个缺点是调试可能更硬。如果最后出现问题,你就没有要检查的中间值">

作为另一个选项,您可以将所有内容放在括号中,然后换行,如下所示:

df_2 = (df_1
            .loc[(df1['id'] == val)][['c1','c2']]
            .merge(df3, left_on='c1', right_on='c1')))

即使你有很多行,它通常也很可读,如果你想更改输出变量的名称,你只需要在一个地方更改它。因此,与重写变量相比,它不那么冗长,而且更容易对进行更改

相关内容

最新更新