带有列表的数据框列上无法调用“系列”对象

问题描述

我有一个包含许多行和列的数据框。 一栏-“诊断超类”具有每个患者的标签,这些标签以列表的形式存储在行中。 看起来像这样:

['MI','HYP','STTC']
['MI','CD','STTC']

我需要从每一行中获取一个标签 所需的输出是一列,用于存储每行的每个第一个列表元素 所以我写了一个函数

def labels(column_with_lists):
    label = column_with_lists
    for a in column_with_lists() :
        list_label = column_with_lists[0]
        label = list_label[0]
    return label

因此,当我运行代码时,我会遇到以下问题:

Traceback (most recent call last):
  File "C:/Users/nikit/PycharmProjects/ECG/ECG.py",line 77,in <module>
    print(labels(y_true['diagnostic_superclass']))
  File "C:/Users/nikit/PycharmProjects/ECG/ECG.py",line 63,in labels
    for a in column_with_lists() :
TypeError: 'Series' object is not callable

解决方法

错误是由于变量名后面的()导致将其作为函数调用。这是熊猫系列,不是函数。

从一系列列表中获取新系列的一种方法是使用pandas.Series.apply()

def labels(column_with_lists):
    return column_with_lists.apply(lambda x: x[0])
,

正如@Vivek Kalyanarangan所说,删除括号即可,但是我认为您很困惑,如果您不对任何内容使用“ a”,为什么还要在这一部分进行迭代?

for a in column_with_lists :
    list_label = column_with_lists[0]
    label = list_label[0]

我认为您必须将每行的第一项存储在列表中。实际上,您不需要使用函数:

first_element_of_each_row = [i[0] for i in y_true['diagnostic_superclass'].to_numpy()]

这应该可行。