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?
Python/Pandas,.count 不适用于更大的数据框
pandas的DataFrame对象抽取“整列”或者“整行”数据
pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换
pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换替换具体数据列的相关值