我想每一个设计决定都是有原因的。许多熊猫函数(例如df.drop
,df.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
。由于此函数主要用于更新数据帧,因此为何不提供这样的参数?背后的原因是什么?
答案 0 :(得分:1)
pandas.DataFrame.apply
和pandas.Series.apply
都从Series
或DataFrame
返回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.apply
和pandas.Series.apply
之间保持一致性,避免仅在inplace
中使用pandas.Series.apply
自变量而产生的混乱。