编译 pandas 列多个 str 值作为输出列表并排除 NA

Compile pandas column multiple str values as output list and exclude NA

我有一个如下所示的数据框

df = [{"condition": "a", "runtimes": "1,15,2.0,nan"}, {"condition": "b", "runtimes": "51,75,1.0,NaN"}]
df = pd.DataFrame(df)
print(df)

我的objective是

a) 创建一个 output_list - 这将 concat/append 所有 runtimes 列值并将其存储为列表

b) output_list 不应包含 NAnan,也不应包含重复值

c) 列表中的所有值都应为 int 数据类型

我正在尝试类似下面的操作

for b in df.runtimes.tolist():
    print(type(b))
    for a in b.split(','):
        print(int(a,base=10))  # it threw error here

ValueError: invalid literal for int() with base 10: '2.0'

我希望所有的runtimes值都是int格式(只能是int数据类型)

我希望我的输出是一个 python 列表,如下所示

output_list = [1,2,15,51,75]

首先拆分值并使用 Series.explode,如果不匹配则转换为带有错误值的数字,然后移动错误值、排序、转换为整数、删除重复项并最后转换为列表:

L = (pd.to_numeric(df.runtimes.str.split(',').explode(), errors='coerce')
       .dropna()
       .sort_values()
       .astype(int)
       .unique()
       .tolist())
print (L)
[1, 2, 15, 51, 75]
        

或者如果可能的话转换为浮点数 pd.to_numeric:

L = (df.runtimes.str.split(',')
                .explode()
                .astype(float)
                .dropna()
                .sort_values()
                .astype(int)
                .unique()
                .tolist())