我有一个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值吗?
答案 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_name
和cleaned_col_name
。