繁体   English   中英

从pandas dataframe中的列表中删除所有nan值

[英]delete all nan values from list in pandas dataframe

如果有任何元素与nan一起然后我想保留元素并且想要仅删除nan

例1 - >

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

输出应该是这样的

index   values

0         [a]

例2->

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

1     [nan,nan,nan]

输出应该是这样的

index   values

0      [a,b,c]

1        [] 

这是使用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)

输出:

        a
0     [a]
1      []
2  [a, b]

您可以使用np.nan == np.nan计算结果为False的事实:

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]

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

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

df['values'] = df['values'].apply(remove_nan)

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

df['values'].apply(lambda v: pd.Series(v).dropna().values )

您可以使用pd.Series.mapdf.values

import pandas as pd
my_filter = lambda x: not pd.isna(x)
df['new_values'] = df['values'].map(lambda x: list(filter(my_filter, x)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM