[英]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.map
上df.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.