在用 apply 时,困惑了很久,>_<
'''
数据来源 monogodb,用 pymongo 连接,读取数据
如果数据较少时,运行没有问题
但是有 20 多万条数据时,有了问题
some_col 的类型为 object
'''
def adjust_len(x, vaild_len):
if x == '':
return None
elif len(x) > vaild_len:
return 'other'
else:
return x
df['some_col'].apply(adjust_len, args=(100,))
'''
TypeError: object of type 'int' has no len()
'''
为了找到原因
def adjust_len(x, vaild_len):
print(type(x), x)
if x == '':
return None
elif len(x) > vaild_len:
return 'other'
else:
return x
df['some_col'].apply(adjust_len, args=(10,))
'''
<class 'str'> 5909229
<class 'str'> 2574
<class 'str'>
<class 'int'> 6227524
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-7b24ad6a1005> in <module>()
'''
<class 'int'> 6227524,怎么就突然变成了 int
# 解决方案 1
df['some_col'].astype(str).apply(adjust_len, args=(10,))
#做一下转换,就可以了,但是为什么???
1
wisefree OP 都是使用 df['some_col'].apply(adjust_len, args=(100,))
df['some_col'].apply(adjust_len, args=(10,)),手滑了一下,-_- |
2
wisefree OP 结题哈,十分抱歉。
我从未怀疑是数据源的问题,以为 mongodb 中存储的就是 string,谁知道存储的居然是 int 刚刚用$type 检验了一下 |