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)
这是使用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)
您可以使用计算结果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]
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)