ValueError:Series.replace不能使用dict值和非None来_replace



代码:

h1=df[df["native-country"]!="?"]
f1=h1.mode()
df['native-country'] = df['native-country'].replace("?",df['native-country'].mode())

错误:

ValueError: Series.replace cannot use dict-value and non-None to_replace

我不知道为什么我会出现这个错误,希望有人能帮助我

我简单推荐的答案是使用:

mode = df[df["native-country"]!="?"]["native-country"].mode()[0]
df['native-country'] = df['native-country'].replace("?", mode)

但这也带来了一个重要的警告和进一步的解释。


更详细的解释:

df['native-country'].mode()将返回一个系列,而不是单个值。这是因为可以有不止一种模式。考虑以下内容:

d = {'native-country': ['?', None, 'Spain', 'Germany', 'Greece']}
df = pd.DataFrame(d)
mode = df['native-country'].mode()

检查mode可以发现实际上存在多个模式值,因为该系列中最常见的元素是出现一次的任何元素:

0          ?
1    Germany
2     Greece
3      Spain
dtype: object

同样值得注意的是,默认情况下会排除None值。即使在存在单个最常见值的情况下,Series.mode()也会返回单个元素系列:

d = {'native-country': ['?', None, 'Spain', 'Germany', 'Spain']}
df = pd.DataFrame(d)
mode = df['native-country'].mode()

这使得mode为:

0    Spain
dtype: object

我非常简单的方法只是使用返回的Series的第一个值作为用于替换的值,但对于可能有多种模式的情况,您必须自己决定是否需要更复杂的逻辑。


完整、可粘贴的复制代码示例:

import pandas as pd

d = {'native-country': ['?', None, 'Spain', 'Germany', 'Spain']}
df = pd.DataFrame(d)
print(df)
mode = df[df["native-country"]!="?"]["native-country"].mode()[0]
df['native-country'] = df['native-country'].replace("?", mode)
print(df)

您应该添加方括号,如下

.replace(["?"],mode)

相关内容

  • 没有找到相关文章

最新更新