熊猫:使用python map()意外输出数据类型

时间:2018-07-12 05:43:47

标签: python python-3.x pandas dictionary

我正在pandas.Dataframe上使用map()。 我正在尝试将字符串映射到某些特定的整数。

>>> df_train['gold_label'].head()
0          neutral
1    contradiction
2       entailment
3    contradiction
4    contradiction
Name: gold_label, dtype: object
>>> dic = {'entailment': 0, 'neutral': 1, 'contradiction': 2}
>>> df_train['gold_label'] = df_train['gold_label'].map(dic)
>>> df_train['gold_label'].head()
0    1.0
1    2.0
2    0.0
3    2.0
4    2.0
Name: gold_label, dtype: float64

我期望得到一个整数结果,但实际上是一个float64。 但是,我使用另一个相同格式的数据集(上面是dev数据集),结果将是预期的整数。

上述程序哪里出问题了?

1 个答案:

答案 0 :(得分:0)

如Akshay所提到的,如果在数据框中找到的字典映射之外还有一个值,则结果值为'NaN',并导致float64结果。

> a
array(['neutral', 'contradiction', 'entailment', 'contradiction',
   'contradiction'],
  dtype='|S13')
> b
array(['neutral', 'contradiction', 'entailment', 'contradiction',
   'contradiction', 'test'],
  dtype='|S13')
> d = pd.DataFrame(a, columns=['gold_label'])
> d2 = pd.DataFrame(b, columns=['gold_label'])
> dic = {'contradiction': 2, 'entailment': 0, 'neutral': 1}
> d['gold_label'].map(dic)
 0    1
 1    2
 2    0
 3    2
 4    2
 Name: gold_label, dtype: int64
 > d2['gold_label'].map(dic)
 0    1.0
 1    2.0
 2    0.0
 3    2.0
 4    2.0
 5    NaN
 Name: gold_label, dtype: float64