我有很多字符串,其中一些由一个句子组成,一些由多个句子组成。我的目标是确定哪个单句字符串以感叹号结束'!'。
我的代码给出了一个奇怪的结果。而不是返回' 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)
为什么会这样?
答案 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}}