为什么熊猫没有附带就地使用.apply的选项?

时间:2020-04-01 16:35:02

标签: python pandas dataframe

我想每一个设计决定都是有原因的。许多熊猫函数(例如df.dropdf.rename df.replace)带有参数inplace。如果将其设置为True,则熊猫会修改数据框,而不是返回新的数据框,就地。这里没有惊喜;)。

但是,我经常发现我将df.apply与lambda表达式结合使用来对列进行更复杂的操作。考虑以下示例:

说我有一些文本数据,需要对它们进行预处理以进行情感分析。我会用:

def remove_punctuation(text):
    no_punct = "".join([c for c in text if c not in string.punctuation])
    return no_punct

然后按如下所示修改我的专栏:

df['text'] = df['text'].apply(lambda x: remove_punctuation(x))

我最近注意到.apply 没有参数inplace=True。由于此函数主要用于更新数据帧,因此为何不提供这样的参数?背后的原因是什么?

1 个答案:

答案 0 :(得分:1)

pandas.DataFrame.applypandas.Series.apply都从SeriesDataFrame返回Series。在您的示例中,您将其应用于Series,而inplace可能在那里有意义。但是,有些其他应用程序则没有。

例如,df为:

   col1  col2
0     1     3
1     2     4

正在做

s = df.apply(lambda x: x.col1 + x.col2, axis=1)

将返回Series,其类型和形状与原始DataFrame不同。 在这种情况下,inplace参数没有多大意义。

我认为pandas开发人员希望在pandas.DataFrame.applypandas.Series.apply之间保持一致性,避免仅在inplace中使用pandas.Series.apply自变量而产生的混乱。