当指定`return 1`时,为什么Python函数返回1.0(浮点数)?

时间:2018-05-08 11:29:31

标签: python python-3.x series

我有很多字符串,其中一些由一个句子组成,一些由多个句子组成。我的目标是确定哪个单句字符串以感叹号结束'!'。

我的代码给出了一个奇怪的结果。而不是返回' 1'如果找到,则返回1.0。我尝试过:docker但这没有用。我对编码很新,不明白,为什么会这样,我怎样才能得到1作为整数?

return int(1)

这会返回正确的结果,但应该有' 1'而不是' 1.0'。

'Sentences'                                                                        
0  [This is a string., And a great one!]      
1  [It's a wonderful sentence!]
2  [This is yet another string!]
3  [Strange strings have been written.]                
4  etc. etc.                                  

e = df['Sentences']

def Single(s):
    if len(s) == 1: # Select the items with only one sentence
        count = 0
        for k in s: # loop over every sentence
            if (k[-1]=='!'): # check if sentence ends with '!'
                count = count+1
        if count == 1: 
        return 1
    else:
        return '' 

df['Single'] = e.apply(Single)

为什么会这样?

2 个答案:

答案 0 :(得分:2)

原因是np.nan被视为float。这使得float类型的系列。除非您希望列的类型为Object,否则您无法避免这种情况任何东西。这是低效且不可取的,我拒绝告诉你如何做到这一点。

如果有替代值,您可以使用而不是np.nan,例如0,然后有一个解决方法。您可以将NaN值替换为0,然后转换为int

s = pd.Series([1, np.nan, 2, 3])

print(s)
# 0    1.0
# 1    NaN
# 2    2.0
# 3    3.0
# dtype: float64

s = s.fillna(0).astype(int)

print(s)
# 0    1
# 1    0
# 2    2
# 3    3
# dtype: int32

答案 1 :(得分:0)

使用df['Single'] = e.apply(Single).astype(int)

<强>实施例

{{1}}