请教使用 pandas 的正确姿势

2017-11-13 20:08:10 +08:00
 wisefree

在用 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,))

#做一下转换,就可以了,但是为什么???
1863 次点击
所在节点    Python
2 条回复
wisefree
2017-11-13 22:59:11 +08:00
都是使用 df['some_col'].apply(adjust_len, args=(100,))

df['some_col'].apply(adjust_len, args=(10,)),手滑了一下,-_-
wisefree
2017-11-13 23:09:49 +08:00
结题哈,十分抱歉。

我从未怀疑是数据源的问题,以为 mongodb 中存储的就是 string,谁知道存储的居然是 int
刚刚用$type 检验了一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX