将 pandas 中的所有 NaN 值向左移动
Shift all NaN values in pandas to the left
我有一个 (250, 33866) 数据框。正如您在图片中看到的,所有 NaN
值都位于每一行的末尾。我想将那些 NaN
值移到数据框的左侧。同时,我想将 0
列(指的是 Id)保留在原位(保持第一个)。
我试图定义一个循环遍历所有行和列的函数来执行此操作,但我认为它对于大数据来说效率非常低。还有其他选择吗?谢谢
您可以反转 df
的列,删除 NaN;构建一个 DataFrame 并将其反向:
out = pd.DataFrame(df.iloc[:,::-1].apply(lambda x: x.dropna().tolist(), axis=1).tolist(),
columns=df.columns[::-1]).iloc[:,::-1]
例如,对于如下所示的 DataFrame:
col0 col1 col2 col3 col4
1 1.0 2.0 3.0 10.0 20.0
2 1.0 2.0 3.0 NaN NaN
3 1.0 2.0 NaN NaN NaN
以上代码产生:
col0 col1 col2 col3 col4
0 1.0 2.0 3.0 10.0 20.0
1 NaN NaN 1.0 2.0 3.0
2 NaN NaN NaN 1.0 2.0
我有一个 (250, 33866) 数据框。正如您在图片中看到的,所有 NaN
值都位于每一行的末尾。我想将那些 NaN
值移到数据框的左侧。同时,我想将 0
列(指的是 Id)保留在原位(保持第一个)。
我试图定义一个循环遍历所有行和列的函数来执行此操作,但我认为它对于大数据来说效率非常低。还有其他选择吗?谢谢
您可以反转 df
的列,删除 NaN;构建一个 DataFrame 并将其反向:
out = pd.DataFrame(df.iloc[:,::-1].apply(lambda x: x.dropna().tolist(), axis=1).tolist(),
columns=df.columns[::-1]).iloc[:,::-1]
例如,对于如下所示的 DataFrame:
col0 col1 col2 col3 col4
1 1.0 2.0 3.0 10.0 20.0
2 1.0 2.0 3.0 NaN NaN
3 1.0 2.0 NaN NaN NaN
以上代码产生:
col0 col1 col2 col3 col4
0 1.0 2.0 3.0 10.0 20.0
1 NaN NaN 1.0 2.0 3.0
2 NaN NaN NaN 1.0 2.0