【发布时间】:2014-07-14 11:56:03
【问题描述】:
我试图了解我的 Python 脚本哪里出错了。我有一个熊猫系列(diagnoses)列表,每个列表都是字符串列表(从不为空)。我可以并且确实使用diagnoses.map(type) 和
for x in diagnoses[0]:
type x
然而,当我将 lambda 函数映射到这一系列列表时,我得到一个 TypeError: 'float' object not iterable。
想象一下这样的数据:
LopNr AR var3 va4 var5 var6 var7 var8 var9 var10 DIAGNOS
6 2011 S834
6 2011 K21 S834
代码是:
from pandas import *
tobacco = lambda lst: any( (((x >= 'C30') and (x<'C40')) or ((x >= 'F17') and (x<'F18'))) for x in lst)
treatments = read_table(filename,usecols=[0,1,10])
diagnoses = treatments['DIAGNOS'].str.split(' ')
treatments['tobacco'] = diagnoses.map(tobacco)
发生了什么,我该如何解决?
PS:如果我首先使用IOpro 导入源文本文件并从该适配器构建一个数据框,那么相同的代码肯定会在非常相似的系列上运行,见下文。我不确定为什么这会改变相关的数据类型,据我所知,pandas Series 在任何一种情况下都有字符串列表……这是 Python 2.7.6 和 pandas 0.13.1。
import iopro
adapter = iopro.text_adapter(filename,parser='csv',field_names=True,output='dataframe',delimiter='\t')
treatments = adapter[['LopNr','AR','DIAGNOS']][:]
【问题讨论】:
标签: python list types lambda pandas