Pandas结构分裂with.tolist()生成了一个浮点数?

2024-10-01 09:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很难修复的代码错误,在测试整个数据的一小部分时效果很好。我可以反复检查类型以确定,但是错误消息已经足够有信息了:我创建的列表最终变成了一个float。但是怎么做呢?在

最后三行:

diagnoses = all_treatments['DIAGNOS'].str.split(' ').tolist()
all_treatments = all_treatments.drop(['DIAGNOS','INDATUMA','date'], axis=1)
all_treatments['tobacco'] = tobacco(diagnoses)

错误:

^{pr2}$

FWIW,函数本身是:

def tobacco(codes_column):
    return [any('C30' <= code < 'C40' or 
                'F17' <= code <'F18'
                for code in codes) if codes else False
            for codes in codes_column]

我在Linux下使用的是pandas 0.16.2np19py26_0、iopro 1.7.1np19py27_p0和python 2.7.10 0版本。在


Tags: 数据代码in类型for错误codecolumn
2条回答

你可以用结构分裂并对结果应用函数:

def tobacco(codes):
    return any(['C30' <= code < 'C40' or 'F17' <= code <'F18' for code in codes])

data = [('C35 C50'), ('C36'), ('C37'), ('C50 C51'), ('F1 F2'), ('F17'), ('F3 F17'), ('')]
df = pd.DataFrame(data=data, columns=['DIAGNOS'])

^{pr2}$
df.DIAGNOS.str.split(' ').apply(tobacco)

0     True
1     True
2     True
3    False
4    False
5     True
6     True
7    False
dtype: bool

编辑:

好像在用结构包含比这两种方法都快得多。在

tobacco_codes = '|'.join(["C{}".format(i) for i in range(30, 40)] + ["F17"])

data = [('C35 C50'), ('C36'), ('C37'), ('C50 C51'), ('F1 F2'), ('F17'), ('F3 F17'), ('C3')]
df = pd.DataFrame(data=data, columns=['DIAGNOS'])

df.DIAGNOS.str.contains(tobacco_codes)

我想诊断是一个生成器,由于您在代码的第2行中删除了一些内容,所以会更改生成器。我现在不能测试任何东西,但请在注释代码的第2行时告诉我它是否有效。在

相关问题 更多 >