从熊猫数据框中的列表中删除所有 nan 值

Shu*_*nna 4 python dataframe python-2.7 pandas

如果任何元素与 nan 一起存在,那么我想保留元素并只想删除 nan

示例 1 ->

index      values
0     [nan,'a',nan,nan]
Run Code Online (Sandbox Code Playgroud)

输出应该像

index   values

0         [a]
Run Code Online (Sandbox Code Playgroud)

示例 2->

index      values
0     [nan,'a',b,c]

1     [nan,nan,nan]
Run Code Online (Sandbox Code Playgroud)

输出应该像

index   values

0      [a,b,c]

1        [] 
Run Code Online (Sandbox Code Playgroud)

Rak*_*esh 6

这是使用df.apply.

import pandas as pd
import numpy as np

df = pd.DataFrame({"a": [[np.nan, np.nan, np.nan, "a", np.nan], [np.nan, np.nan], ["a", "b"]]})
df["a"] = df["a"].apply(lambda x: [i for i in x if str(i) != "nan"])
print(df)
Run Code Online (Sandbox Code Playgroud)

输出:

        a
0     [a]
1      []
2  [a, b]
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

您可以使用计算结果np.nan == np.nanFalse

df = pd.DataFrame([[0, [np.nan, 'a', 'b', 'c']],
                   [1, [np.nan, np.nan, np.nan]],
                   [2, [np.nan, 'a', np.nan, np.nan]]],
                  columns=['index', 'values'])

df['values'] = df['values'].apply(lambda x: [i for i in x if i == i])

print(df)

   index     values
0      0  [a, b, c]
1      1         []
2      2        [a]
Run Code Online (Sandbox Code Playgroud)

lambda只是一个匿名函数。您还可以使用命名函数:

def remove_nan(x):
    return [i for i in x if i == i]

df['values'] = df['values'].apply(remove_nan)
Run Code Online (Sandbox Code Playgroud)

相关:为什么 NaN 不等于 NaN?