【问题标题】:ValueError: Series.replace cannot use dict-value and non-None to_replaceValueError:Series.replace 不能使用 dict-value 和 non-None to_replace
【发布时间】:2021-11-25 17:58:46
【问题描述】:

代码:

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

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

【问题讨论】:

    标签: python pandas dataframe valueerror


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2021-04-18
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多