我已经查找了这个问题,大多数问题都是针对更复杂的替代品。但是在我的情况下,我有一个非常简单的数据帧作为测试假人。
目标是用nan替换数据帧中任何位置的字符串,但这似乎不起作用(即不替换;无任何错误)。我尝试用另一个字符串替换它也不起作用。 E.g。
d = {'color' : pd.Series(['white', 'blue', 'orange']),
'second_color': pd.Series(['white', 'black', 'blue']),
'value' : pd.Series([1., 2., 3.])}
df = pd.DataFrame(d)
df.replace('white', np.nan)
输出仍然是:
color second_color value
0 white white 1
1 blue black 2
2 orange blue 3
答案 0 :(得分:20)
鉴于这是搜索“Pandas replace is not working”时谷歌的最高结果,我还想提及:
替换完全替换搜索,除非您打开正则表达式 开关。使用regex = True,它应该执行部分替换 好。
我花了30分钟才发现,所以希望我已经把下一个人保存了30分钟。
答案 1 :(得分:18)
您需要分配回来
df = df.replace('white', np.nan)
或传递param inplace=True
:
In [50]:
d = {'color' : pd.Series(['white', 'blue', 'orange']),
'second_color': pd.Series(['white', 'black', 'blue']),
'value' : pd.Series([1., 2., 3.])}
df = pd.DataFrame(d)
df.replace('white', np.nan, inplace=True)
df
Out[50]:
color second_color value
0 NaN NaN 1.0
1 blue black 2.0
2 orange blue 3.0
大多数pandas ops返回一个副本,大多数都有param inplace
,通常默认为False
答案 2 :(得分:5)
当您使用df.replace()
时,它会创建一个新的临时对象,但不会修改您的临时对象。您可以使用以下两行之一来修改df:
df = df.replace('white', np.nan)
df.replace('white', np.nan, inplace = True)
答案 3 :(得分:0)
在我的情况下,任何一个inplace=True
或另一个regex=True
都不起作用。
因此,我找到了一种使用Series.str.replace的解决方案。如果您需要替换子字符串,它会很有用。
In [4]: df['color'] = df.color.str.replace('e', 'E!')
In [5]: df
Out[5]:
color second_color value
0 whitE! white 1.0
1 bluE! black 2.0
2 orangE! blue 3.0
甚至切片。
In [10]: df.loc[df.color=='blue', 'color'] = df.color.str.replace('e', 'E!')
In [11]: df
Out[11]:
color second_color value
0 white white 1.0
1 bluE! black 2.0
2 orange blue 3.0
答案 4 :(得分:0)
在直接使用替换功能之前,您可能需要检查列的数据类型。可能是你在Object数据类型上使用了replace函数,在这种情况下,你需要在将其转换为字符串后应用replace函数。
Wrong:
df["column-name"] = df["column-name"].replace('abc', 'def')
Correct:
df["column-name"] = df["column-name"].str.replace('abc', 'def')
答案 5 :(得分:0)
对我有用的是使用这个 dict 符号。
{old_value:new_value}
df.replace({10:100},inplace=True)
查看文档以获取更多信息。 https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.DataFrame.replace.html