从熊猫列中的列表中删除浮点值

时间:2020-06-06 13:39:33

标签: python pandas numpy

我有一个pandas数据框,其中有一列,其中每个值都是元素列表。字符串和nan值的组合(表示为dtype:float)。以下是前两个元素:

1    [nan, JavaScript, nan, nan, nan, nan, nan, nan...

2    [Java, nan, nan, nan, nan, nan, SQL, nan, nan,...

我正在尝试从列中的每个列表中删除nan值,以便仅将字符串保留在每个列表中。

有人知道如何在有效保留字符串值的同时删除这些float值吗?

2 个答案:

答案 0 :(得分:0)

考虑这个;

df['your_column'] = df['your_column'].map(lambda x: [w for w in x if not isinstance(w, numpy.NaN)])

结果;

1    [JavaScript, ...

2    [Java, SQL, ...

答案 1 :(得分:0)

您可以尝试使用pd.notnull()

进行列表理解
df['cleaned_col_name'] = [[e for e in i if pd.notnull(e)] for i in df['col_name']]

或者从列中创建一个数据框,然后stack()然后作为列表聚合回来

df['cleaned_col_name'] = pd.DataFrame(df['col_name'].tolist()).stack()
                                           .groupby(level=0).agg(list)

或爆炸:

df['col_name'].explode().dropna().groupby(level=0).agg(list)

使用现有列名和所需列名替换代码中的col_namecleaned_col_name