如何从Pandas DataFrame中具有行值的列表构建中删除NaN值

时间:2019-11-01 19:19:28

标签: python python-3.x pandas

伙计们,

我在pandas中有一列,是一列包含来自row的所有值的列表。 作为下面的示例。

print(df4['List']) 

0 [8,9,10,25,14,25,14,17,19,30]
1 [nan,85,48,75,nan,96,32,14,15,21,28,17,nan]
2 [nan,85,48,75,nan,]
3 [1,nan]
4 [85,75,41,nan]
5 [nan,65,34]

如何从列表中删除这些“ nan”值?

我在python中尝试了一些常规的list方法,但是我没有 使其在pandas DataFrame中具有相同的结果。

因为这个:

while True:
    try:
        df4['PNs NaNs Removed'] = df4['List'].delete([nan])
    except ValueError:
        break

3 个答案:

答案 0 :(得分:0)

我试图通过使用Series.dropna函数来避免迭代:

def no_nan(listy):
    return list(pd.Series(listy).dropna())

df4['List'] = df4['List'].apply(no_nan)

答案 1 :(得分:0)

事实证明,有许多不同的方式来指示和处理NaN值,并且它可能变得很混乱。此解决方案使用pandas.isna()测试值,该值应比numpy.isnan()适用于更广泛的值。

import pandas as pd


df4['List'] = df4['List'].apply(lambda col_val: [item for item in col_val if not pd.isna(item)])

答案 2 :(得分:-1)

您可以在列表中使用替换

此答案可以帮助您

finding and replacing elements in a list

Replace values in list using Python