替换字符串时出现“ AttributeError:'float'对象没有属性'replace'”错误

时间:2019-04-07 08:23:55

标签: python python-3.x pandas

我有一栏中有文字。我必须替换(':','')。

当我运行此代码时:

df["text"] = [x.replace(':',' ') for x in df["text"]]

我遇到此错误:

AttributeError: 'float' object has no attribute 'replace'

AttributeError                            Traceback (most recent call 
last)
<ipython-input-13-3c116e6f21e2> in <module>
  1 #df["text"] = df["text"].astype(str)
----> 2 df["text"] = [x.replace(':',' ') for x in df["text"]]

<ipython-input-13-3c116e6f21e2> in <listcomp>(.0)
  1 #df["text"] = data["NOTES_ENT"].astype(str)
----> 2 df["text"] = [x.replace(':',' ') for x in df["text"]]

AttributeError: 'float' object has no attribute 'replace'

4 个答案:

答案 0 :(得分:2)

如错误消息中所示,文本必须为字符串。您可以尝试更改数据类型:

text = str(text) 

答案 1 :(得分:0)

请尝试在代码中添加以上行,然后让我知道这是否适合您。

df["text"] = df["text"].astype(str)
df["text"] = [x.replace(':',' ') for x in df["text"]]

答案 2 :(得分:0)

错误非常明显。您正在尝试替换浮动字符。 x可能是浮点数。您可能想做str(x)可以使您

str

但我看不到浮点数包含:

的情况

答案 3 :(得分:0)

我认为问题在于列中缺少值,因此请使用pandas方法Series.str.replaceSeries.replace代替列表理解:

df["text"] = df["text"].str.replace(':',' ')

或者:

df["text"] = df["text"].str.replace(':',' ', regex=True)

可以使用列表理解的解决方案,只需要if-else语句来测试字符串:

df["text"] = [x.replace(':',' ') if isinstance(x, str) else x for x in df["text"]]

示例

df = pd.DataFrame({'text':['qq:ww','e:', np.nan]})
df["text"] = df["text"].str.replace(':',' ')

print (df)
    text
0  qq ww
1     e 
2    NaN