【问题标题】:pandas map makes values NaN熊猫地图使值 NaN
【发布时间】:2019-02-13 15:21:27
【问题描述】:

我正在尝试映射我想要更改的值。 当我像这样应用'map'>> df [column].map(dictionary)时,不在字典中的值转换为NaN。我认为原因是该系列中没有匹配的值,对吗?如果是这样,不应该应用任何东西来转换为 NaN?我如何使用 df.map() 而不是 df.replace() 来解决这个问题?

df1 = pd.Series(['a','b','c','d'])
df
0    a
1    b
2    c
3    d
dtype: object

mapping = {'a' : 0, 'b' : 1, 'c' : 2}
df1.map(mapping)
0    0.0
1    1.0
2    2.0
3    NaN
dtype: float64

df1 = pd.Series(['a','b','c','d'])
df
0    a
1    b
2    c
3    d
dtype: object

mapping = {'k' : 0, 'e' : 1, 'f' : 2}
df1.map(mapping)

0   NaN
1   NaN
2   NaN
3   NaN
dtype: float64

【问题讨论】:

  • "如何使用 df.map() 而不是 df.replace() 来解决这个问题?" replace 具有您想要的行为。为什么你认为你需要使用map
  • 其实这只是为了我的编码技能。我想知道地图也可以解决这些问题。

标签: python pandas dictionary nan


【解决方案1】:

如果您坚持使用 map,则改为传递可调用对象

df.map(lambda x: mapping.get(x,x))

【讨论】:

  • 天哪,这是一个很好的答案。先生
  • 对于x 值为浮点数(例如100.000000002)且查找值为100.00 的情况,这是一个很好的解决方案。通过添加round(x, n) 函数,映射工作。
【解决方案2】:

要更改默认值,您可以添加一个函数(func,此处):

mapping = {'k' : 0, 'e' : 1, 'f' : 2}
mapping.setdefault('Default', 'write watherver you want here')
def func(x, mapping):
    try:
        tmp=mapping[x]
        return(tmp)
    except:
        return('default value')
df1.map(lambda x: func(x, mapping))

【讨论】:

    【解决方案3】:

    这种行为是有意的。由于无法应用mapping,因此值为NaN。 为了使用映射,您必须创建一个不会更改数据的特定值(如果进行乘法运算,则为 1,如果进行加法运算则为 0)并将该值添加到映射中。

    或者,您可以在完成映射后使用 0.0 之类的中性值替换所有 NaN 值。

    任何一种方法都比简单地使用replace 的工作量大得多。

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2021-12-15
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多