Pandas DataFrame 替换不适用于 inplace=True

Posted

技术标签:

【中文标题】Pandas DataFrame 替换不适用于 inplace=True【英文标题】:Pandas DataFrame replace does not work with inplace=True 【发布时间】:2019-05-07 03:57:50 【问题描述】:

在我的数据框列中,我将 6.3.5、1.8、5.10.0 等版本号保存为对象,因此很可能是字符串。我想删除没有任何内容的点,所以我得到 635、18、5100。我的代码想法是这样的:

for row in dataset.ver:
    row.replace(".","",inplace=True)

如果我不将 inplace 设置为 True,它会起作用,但我们想覆盖它并保护它。

【问题讨论】:

请展示您的数据框样本,这对提出解决方案很有帮助。此外,最好使用矢量化操作,而不是像你在纯 python 中习惯的那样的 for 循环。例如,熊猫中的矢量化解决方案如下所示: dataset['ver'].replace("[.]","", inplace=True, regex=True)。 【参考方案1】:

您正在遍历DataFrame 中的元素,在这种情况下,我假设它的类型为str(或者当您replace 时被强制转换为str)。 str.replace 没有 inplace=... 的参数。

你应该这样做:

dataset['ver'] = dataset['ver'].str.replace('.', '')

【讨论】:

df.col_name = 在现有列上可能有不良行为,而不是使用 df['col_name'] = 是的,我有这样的方式来匹配 OP 的风格,但我在你的评论中改变了它。【参考方案2】:

cmets 中的 Sander van den Oord 指出的非常正确:

dataset['ver'].replace("[.]","", inplace=True, regex=True)

这是我们在 Pandas 中对列进行操作的方式,因为通常,Pandas 会尝试优化 for 循环。 Pandas 开发人员认为 for 循环是 Python 中逐行操作最不理想的模式(请参阅 here。)

【讨论】:

以上是关于Pandas DataFrame 替换不适用于 inplace=True的主要内容,如果未能解决你的问题,请参考以下文章

pandas.DataFrame.agg 不适用于 np.std?

用户定义的函数不适用于 Pandas

Python/Pandas,.count 不适用于更大的数据框

pandas的DataFrame对象抽取“整列”或者“整行”数据

pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换

pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换替换具体数据列的相关值