在 Python 中用 nan 替换浮点列中的点

Posted

技术标签:

【中文标题】在 Python 中用 nan 替换浮点列中的点【英文标题】:Replace dots in a float column with nan in Python 【发布时间】:2018-04-18 07:28:06 【问题描述】:

我有一个这样的数据框 df

df = pd.DataFrame([
    'Name': 'Chris', 'Item Purchased': 'Sponge', 'Cost': 22.50,
    'Name': 'Kevyn', 'Item Purchased': 'Kitty Litter', 'Cost': '.........',
    'Name': 'Filip', 'Item Purchased': 'Spoon', 'Cost': '...'],
    index=['Store 1', 'Store 1', 'Store 2'])

我想将“成本”列中的缺失值替换为 np.nan。到目前为止,我已经尝试过:

df['Cost']=df['Cost'].str.replace("\.\.+", np.nan)

df['Cost']=re.sub('\.\.+',np.nan,df['Cost'])

但它们似乎都不能正常工作。请帮忙。

【问题讨论】:

df['Cost']=df['Cost'].replace(".+", np.NaN, regex=True) @VanPeer 不知道您为什么要为 OP 提供不正确的解决方案。如果没有转义,. 匹配任何内容。 @cᴏʟᴅsᴘᴇᴇᴅ 它在这种情况下起作用.. 你所说的匹配任何东西是什么意思? @VanPeer 我不敢相信,你是对的。我需要找出为什么会这样。试试re.sub('.+', '', '1234'),你就会明白我的意思了。 @VanPeer 见***.com/questions/47132523/… :-) 【参考方案1】:

DataFrame.replaceregex=True 开关一起使用。

df = df.replace('\.+', np.nan, regex=True)
df

         Cost Item Purchased   Name
Store 1  22.5         Sponge  Chris
Store 1   NaN   Kitty Litter  Kevyn
Store 2   NaN          Spoon  Filip

模式\.+ 指定一个或多个点。您也可以使用[.]+ 作为模式来达到同样的效果。

【讨论】:

以上是关于在 Python 中用 nan 替换浮点列中的点的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 将一列中的 NaN 替换为第二列对应行的值

python 在DataFrame中用np.nan替换None

pandas:用列中的最后一个非 NaN 值替换 NaN [重复]

将数据框特定列中的 Nan 值替换为另一个数据框特定列中的值

Pandas - 用特定组的平均值替换列中的 NaN

Python Pandas根据多个其他列中的条件替换一列中的值[重复]