Python UDF的TypeError莫名其妙地返回了

时间:2014-01-28 21:55:18

标签: python pandas

Python 3.3.3

def tuplizeDK(x):
from ast import literal_eval
from pandas import isnull
if isnull(x):
    return tuple()
else:
    x = x+','
    return literal_eval(x)

目标是将输入格式化为unicode对象,该对象由单个数字ID或逗号分隔的数字ID列表组成,然后将其转换为元组。输入可能是空的。

以下是发生的事情:

>>> A = '3233'
>>> tuplizeDK(A)
Traceback (most recent call last):
  File "<pyshell#188>", line 1, in <module>
    tuplizeDK(A)
  File "./tuplize.py", line 4, in tuplizeDK
    if isnull(x):
TypeError: a float is required

但如果我只是评估功能:

>>> isnull(A)

False 

我确信我错过了一些简单的东西......任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我认为,假设您计划将其应用于整个列,更好的方法是使用其中一个向量化字符串方法:str.split

In [11]: s = pd.Series(['a', 'b,c', np.nan, 'd,e,f'])

In [12]: s.str.split(',')
Out[12]: 
0        [a]
1      [b,c]
2        NaN
3    [d,e,f]
dtype: object