在用 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,))
#做一下转换,就可以了,但是为什么???
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.