我认为每个设计决策都是有原因的。许多熊猫函数(如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
。既然这个函数主要用于更新数据格式,为什么这样的参数不可用?这背后的理由是什么?
发布于 2020-04-01 16:46:30
pandas.DataFrame.apply
和pandas.Series.apply
都从DataFrame
或Series
返回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
之间的一致性,避免只在pandas.Series.apply
中使用inplace
参数所产生的混乱。
https://stackoverflow.com/questions/60975864
复制相似问题